{
  "version": "0.1.0",
  "scanTitle": "SCAN: https://www.halifax.ca/",
  "issueNumber": 47,
  "generatedAt": "2026-04-23T19:59:43.595Z",
  "requestedUrls": [
    "https://www.halifax.ca/",
    "https://www.halifax.ca/node/4561",
    "https://www.halifax.ca/about-halifax/diversity-inclusion/accessibility",
    "https://www.halifax.ca/home/311",
    "https://www.halifax.ca/home/online-services",
    "https://www.halifax.ca/fr",
    "https://www.halifax.ca/about-halifax",
    "https://www.halifax.ca/about-halifax/diversity-inclusion",
    "https://www.halifax.ca/about-halifax/employment",
    "https://www.halifax.ca/about-halifax/environment-climate-change",
    "https://www.halifax.ca/about-halifax/municipal-archives",
    "https://www.halifax.ca/about-halifax/regional-community-planning",
    "https://www.halifax.ca/about-halifax/volunteering",
    "https://www.halifax.ca/about-halifax/affordable-access-program",
    "https://www.halifax.ca/city-hall/legislation-by-laws/public-notices",
    "https://www.halifax.ca/about-halifax/regional-community-planning/shape-your-city",
    "https://www.halifax.ca/home/stay-informed/",
    "https://www.halifax.ca/home-property",
    "https://www.halifax.ca/home-property/animal-services",
    "https://www.halifax.ca/home-property/building-development-permits",
    "https://www.halifax.ca/home-property/civic-addressing",
    "https://www.halifax.ca/home-property/garbage-recycling-green-cart",
    "https://www.halifax.ca/home-property/property-taxes",
    "https://www.halifax.ca/home-property/urban-forestry",
    "https://www.halifax.ca/home-property/building-development-permits/alarm-registration",
    "https://www.halifax.ca/about-halifax/regional-community-planning/short-term-rentals",
    "https://www.halifax.ca/home-property/garbage-recycling-green-cart/collection-schedules-what-goes-where",
    "https://www.halifax.ca/transportation",
    "https://www.halifax.ca/transportation/halifax-transit",
    "https://www.halifax.ca/transportation/cycling-walking",
    "https://www.halifax.ca/transportation/parking",
    "https://www.halifax.ca/transportation/winter-operations",
    "https://www.halifax.ca/transportation/your-trip",
    "https://www.halifax.ca/transportation/streets-sidewalks",
    "https://www.halifax.ca/transportation/halifax-transit/routes-schedules",
    "https://www.halifax.ca/about-halifax/regional-community-planning/construction-projects/cogswell-district-redevelopment-0",
    "https://www.halifax.ca/transportation/parking/parking-tickets",
    "https://www.halifax.ca/transportation/parking/street-parking",
    "https://www.halifax.ca/safety-security",
    "https://www.halifax.ca/safety-security/emergency-management",
    "https://www.halifax.ca/safety-security/fire-emergency",
    "https://www.halifax.ca/safety-security/public-safety-strategy-programs",
    "https://www.halifax.ca/safety-security/police",
    "https://www.halifax.ca/safety-security/halifax-district-rcmp",
    "https://www.halifax.ca/safety-security/crossing-guard-program",
    "https://www.halifax.ca/fire-police/fire-emergency-management/emergency-management/emergency-preparedness/voluntary",
    "https://www.halifax.ca/safety-security/police/crime-mapping",
    "https://www.halifax.ca/fire-police/fire/recruitment/volunteer-firefighter-recruitment",
    "https://www.halifax.ca/fire-police/fire/emergency-management",
    "https://www.halifax.ca/fire-police/emergency-management/hfxalert",
    "https://www.halifax.ca/business",
    "https://www.halifax.ca/business/doing-business-halifax",
    "https://www.halifax.ca/business/business-parks",
    "https://www.halifax.ca/business/filming-halifax",
    "https://www.halifax.ca/business/licences",
    "https://www.halifax.ca/business/planning-development",
    "https://www.halifax.ca/business/real-estate-land-management",
    "https://www.halifax.ca/business/doing-business-halifax/garbage-recycling-businesses",
    "https://www.halifax.ca/business/planning-development/planning-subdivision-applications",
    "https://www.halifax.ca/business/doing-business-halifax/procurement",
    "https://www.halifax.ca/parks-recreation",
    "https://www.halifax.ca/parks-recreation/programs-activities",
    "https://www.halifax.ca/parks-recreation/arts-culture-heritage",
    "https://www.halifax.ca/parks-recreation/events",
    "https://www.halifax.ca/parks-recreation/facility-rentals-bookings-field-conditions",
    "https://www.halifax.ca/parks-recreation/halifax-youth",
    "https://www.halifax.ca/parks-recreation/parks-trails-gardens",
    "https://www.halifax.ca/parks-recreation/programs-activities/outdoor-recreation/emera-oval",
    "https://www.halifax.ca/parks-recreation/programs-activities/recreation-activities",
    "https://www.halifax.ca/parks-recreation/programs-activities/recreation-centres-your-community",
    "https://www.halifax.ca/myrec",
    "https://www.halifax.ca/city-hall",
    "https://www.halifax.ca/city-hall/budget-finances",
    "https://www.halifax.ca/city-hall/mayor-andy-fillmore",
    "https://www.halifax.ca/city-hall/districts-councillors",
    "https://www.halifax.ca/city-hall/regional-council",
    "https://www.halifax.ca/city-hall/agendas-meetings-reports",
    "https://www.halifax.ca/city-hall/legislation-by-laws",
    "https://www.halifax.ca/city-hall/elections/2024-election-results",
    "https://www.halifax.ca/city-hall/boards-committees-commissions",
    "https://www.halifax.ca/city-hall/budget-finances/budget",
    "https://www.halifax.ca/city-hall/agendas-meetings-reports?category=127",
    "https://www.halifax.ca/city-hall/strategic-plan",
    "https://www.halifax.ca/transportation/halifax-transit/routes-schedules?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Transit",
    "https://www.halifax.ca/home-property/municipal-payments/making-a-payment",
    "https://www.halifax.ca/transportation/parking?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Parking",
    "https://www.halifax.ca/about-halifax/affordable-access-program?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=AAP",
    "https://www.halifax.ca/home-property/garbage-recycling-green-cart/garbage-collection?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Solid_Waste",
    "https://www.halifax.ca/about-halifax/environment-climate-change/halifact-acting-climate-together",
    "https://www.halifax.ca/transportation/transportation-projects/windsor-street-exchange-redevelopment-project",
    "https://www.halifax.ca/about-halifax/employment/work-halifax-regional-municipality?utm_source=Home_Page&amp;utm_medium=Banner&amp;utm_campaign=Recruitment",
    "https://www.halifax.ca/safety-security/police/reporting-crime",
    "https://www.halifax.ca/online-services",
    "https://www.halifax.ca/safety-security/fire-emergency/recruitment-volunteers",
    "https://www.halifax.ca/suburbanplan",
    "https://www.halifax.ca/about-halifax/regional-community-planning/housing-accelerator-fund/second-unit-incentive",
    "https://www.halifax.ca/parks-recreation/programs-activities/inclusion-support-advisory-group",
    "https://www.halifax.ca/parks-recreation/halifax-youth/youth-services-plan",
    "https://www.halifax.ca/about-halifax/regional-community-planning/helping-address-homelessness?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Addressing_Homelessness",
    "https://www.halifax.ca/home/news"
  ],
  "summary": {
    "okCount": 100,
    "errorCount": 0,
    "averagePerformanceScore": 0.5014000000000002,
    "averageBestPracticesScore": 0.7814000000000003,
    "totalTransferBytes": 194105349,
    "totalCo2Grams": 74.35814884240861,
    "averageTransferBytes": 1941053.49,
    "averageCo2GramsPerPage": 0.7435814884240861,
    "averageRedundancyScore": 34.38,
    "highUrgencyRedundancyCount": 35,
    "averageModularizationScore": 33.54,
    "highUrgencyModularizationCount": 30,
    "averageDeadCodeScore": 14.35,
    "highUrgencyDeadCodeCount": 99,
    "averageNonCriticalResourcesScore": 21.52,
    "highUrgencyNonCriticalResourcesCount": 97,
    "averageFormValidationScore": 30.1775,
    "highUrgencyFormValidationCount": 0,
    "averageMetadataScore": 0.3,
    "highUrgencyMetadataCount": 0,
    "averageLayoutAdaptationScore": 30.27,
    "highUrgencyLayoutAdaptationCount": 0,
    "averageSecurityLightScore": 58.92,
    "highUrgencySecurityLightCount": 0,
    "averageDependencyMaintenanceScore": 9.92,
    "highUrgencyDependencyMaintenanceCount": 0,
    "averageExpectedFilesScore": 50.1,
    "highUrgencyExpectedFilesCount": 1,
    "averageCompressionScore": 17.58,
    "highUrgencyCompressionCount": 1,
    "averageOptimizationScore": 100,
    "highUrgencyOptimizationCount": 100,
    "averageOfflineSupportScore": 100,
    "highUrgencyOfflineSupportCount": 100,
    "averageLanguageVersionScore": 0,
    "highUrgencyLanguageVersionCount": 0,
    "averageMediaHintsScore": 45.54,
    "highUrgencyMediaHintsCount": 0,
    "distinctSiteCount": 2,
    "singleSiteScan": false,
    "greenWeb": {
      "pageHostsChecked": 100,
      "pageHostsGreen": 0,
      "pageHostsNotGreen": 100,
      "pageHostsUnknown": 0,
      "externalOriginsChecked": 31,
      "externalOriginsGreen": 17,
      "externalOriginsNotGreen": 14,
      "externalOriginsUnknown": 0
    }
  },
  "budgetGuidance": {
    "wsgReference": {
      "id": "3.1",
      "title": "Set goals based on performance and energy impact",
      "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact"
    },
    "benchmarkReference": {
      "name": "Sustainable Web Design Digital Carbon Ratings",
      "url": "https://sustainablewebdesign.org/digital-carbon-ratings/"
    },
    "current": {
      "averageTransferBytes": 1941053.49,
      "averageCo2GramsPerPage": 0.7435814884240861,
      "transferRating": "E",
      "co2Rating": "F"
    },
    "recommendedBudget": {
      "targetRating": "B",
      "maxTransferBytesPerPage": 999270.4,
      "maxCo2GramsPerPage": 0.145
    },
    "reductionsNeeded": {
      "transferBytesPerPage": {
        "absolute": 941783.09,
        "percent": 48.519172441765114,
        "needsReduction": true
      },
      "co2GramsPerPage": {
        "absolute": 0.5985814884240861,
        "percent": 80.49978351299376,
        "needsReduction": true
      }
    },
    "stretchBudget": {
      "targetRating": "A",
      "maxTransferBytesPerPage": 543897.6,
      "maxCo2GramsPerPage": 0.079
    }
  },
  "thirdPartyJsSummary": {
    "wsgReference": {
      "title": "Give third parties the same priority as first parties during assessment",
      "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
    },
    "averageScore": 75.86,
    "highUrgencyPages": 99,
    "assessedPages": 100,
    "providers": [
      {
        "hostname": "www.googletagmanager.com",
        "pageCount": 100,
        "transferBytes": 61750749,
        "requestCount": 399,
        "status": "green",
        "hostedBy": "Google Cloud"
      },
      {
        "hostname": "www.youtube.com",
        "pageCount": 100,
        "transferBytes": 13226026,
        "requestCount": 291,
        "status": "green",
        "hostedBy": "Google Cloud"
      },
      {
        "hostname": "cdn.halifax.ca",
        "pageCount": 99,
        "transferBytes": 18066547,
        "requestCount": 4757,
        "status": "not-green",
        "hostedBy": null
      },
      {
        "hostname": "www.google-analytics.com",
        "pageCount": 99,
        "transferBytes": 2064908,
        "requestCount": 99,
        "status": "green",
        "hostedBy": "Google Cloud"
      },
      {
        "hostname": "googleads.g.doubleclick.net",
        "pageCount": 99,
        "transferBytes": 219842,
        "requestCount": 99,
        "status": "green",
        "hostedBy": "Google Cloud"
      },
      {
        "hostname": "www.google.com",
        "pageCount": 10,
        "transferBytes": 261160,
        "requestCount": 24,
        "status": "green",
        "hostedBy": "Google Cloud"
      },
      {
        "hostname": "static.doubleclick.net",
        "pageCount": 9,
        "transferBytes": 3070,
        "requestCount": 27,
        "status": "green",
        "hostedBy": "Google Cloud"
      },
      {
        "hostname": "www.gstatic.com",
        "pageCount": 6,
        "transferBytes": 2242967,
        "requestCount": 67,
        "status": "green",
        "hostedBy": "Google Cloud"
      },
      {
        "hostname": "apis.google.com",
        "pageCount": 5,
        "transferBytes": 581370,
        "requestCount": 10,
        "status": "green",
        "hostedBy": "Google Cloud"
      },
      {
        "hostname": "api.recollect.net",
        "pageCount": 3,
        "transferBytes": 2262842,
        "requestCount": 21,
        "status": "not-green",
        "hostedBy": null
      },
      {
        "hostname": "static.xx.fbcdn.net",
        "pageCount": 3,
        "transferBytes": 705584,
        "requestCount": 21,
        "status": "not-green",
        "hostedBy": null
      },
      {
        "hostname": "cdn.pendo.io",
        "pageCount": 3,
        "transferBytes": 565782,
        "requestCount": 3,
        "status": "green",
        "hostedBy": "Google Cloud"
      }
    ]
  },
  "externalProviderRiskSummary": {
    "recurringNonGreenProviders": [
      {
        "hostname": "cdn.halifax.ca",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 99,
        "requestCount": 11965,
        "transferBytes": 40008464,
        "resourceTypes": [
          "script",
          "stylesheet"
        ],
        "riskScore": 100
      },
      {
        "hostname": "api.recollect.net",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 3,
        "requestCount": 21,
        "transferBytes": 2262842,
        "resourceTypes": [
          "script"
        ],
        "riskScore": 89
      },
      {
        "hostname": "static.xx.fbcdn.net",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 3,
        "requestCount": 25,
        "transferBytes": 720458,
        "resourceTypes": [
          "script",
          "stylesheet"
        ],
        "riskScore": 89
      },
      {
        "hostname": "recollect-us.global.ssl.fastly.net",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 3,
        "requestCount": 12,
        "transferBytes": 315719,
        "resourceTypes": [
          "stylesheet"
        ],
        "riskScore": 83
      },
      {
        "hostname": "cdn.syncfusion.com",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 2,
        "requestCount": 14,
        "transferBytes": 7423143,
        "resourceTypes": [
          "script",
          "stylesheet"
        ],
        "riskScore": 81
      },
      {
        "hostname": "hrm.maps.arcgis.com",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 2,
        "requestCount": 1235,
        "transferBytes": 5156485,
        "resourceTypes": [
          "script",
          "stylesheet"
        ],
        "riskScore": 81
      },
      {
        "hostname": "assets.ca.recollect.net",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 3,
        "requestCount": 3,
        "transferBytes": 123478,
        "resourceTypes": [
          "script"
        ],
        "riskScore": 69
      },
      {
        "hostname": "go.playerzero.app",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 2,
        "requestCount": 2,
        "transferBytes": 204463,
        "resourceTypes": [
          "script"
        ],
        "riskScore": 61
      },
      {
        "hostname": "www.datadoghq-browser-agent.com",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 2,
        "requestCount": 2,
        "transferBytes": 121321,
        "resourceTypes": [
          "script"
        ],
        "riskScore": 59
      },
      {
        "hostname": "js.arcgis.com",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 2,
        "requestCount": 2,
        "transferBytes": 75008,
        "resourceTypes": [
          "stylesheet"
        ],
        "riskScore": 57
      }
    ],
    "nonGreenProviders": [
      {
        "hostname": "cdn.halifax.ca",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 99,
        "requestCount": 11965,
        "transferBytes": 40008464,
        "resourceTypes": [
          "script",
          "stylesheet"
        ],
        "riskScore": 100
      },
      {
        "hostname": "api.recollect.net",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 3,
        "requestCount": 21,
        "transferBytes": 2262842,
        "resourceTypes": [
          "script"
        ],
        "riskScore": 89
      },
      {
        "hostname": "static.xx.fbcdn.net",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 3,
        "requestCount": 25,
        "transferBytes": 720458,
        "resourceTypes": [
          "script",
          "stylesheet"
        ],
        "riskScore": 89
      },
      {
        "hostname": "recollect-us.global.ssl.fastly.net",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 3,
        "requestCount": 12,
        "transferBytes": 315719,
        "resourceTypes": [
          "stylesheet"
        ],
        "riskScore": 83
      },
      {
        "hostname": "cdn.syncfusion.com",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 2,
        "requestCount": 14,
        "transferBytes": 7423143,
        "resourceTypes": [
          "script",
          "stylesheet"
        ],
        "riskScore": 81
      },
      {
        "hostname": "hrm.maps.arcgis.com",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 2,
        "requestCount": 1235,
        "transferBytes": 5156485,
        "resourceTypes": [
          "script",
          "stylesheet"
        ],
        "riskScore": 81
      },
      {
        "hostname": "assets.ca.recollect.net",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 3,
        "requestCount": 3,
        "transferBytes": 123478,
        "resourceTypes": [
          "script"
        ],
        "riskScore": 69
      },
      {
        "hostname": "go.playerzero.app",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 2,
        "requestCount": 2,
        "transferBytes": 204463,
        "resourceTypes": [
          "script"
        ],
        "riskScore": 61
      },
      {
        "hostname": "www.datadoghq-browser-agent.com",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 2,
        "requestCount": 2,
        "transferBytes": 121321,
        "resourceTypes": [
          "script"
        ],
        "riskScore": 59
      },
      {
        "hostname": "js.arcgis.com",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 2,
        "requestCount": 2,
        "transferBytes": 75008,
        "resourceTypes": [
          "stylesheet"
        ],
        "riskScore": 57
      },
      {
        "hostname": "code.jquery.com",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 2,
        "requestCount": 2,
        "transferBytes": 61765,
        "resourceTypes": [
          "script"
        ],
        "riskScore": 57
      },
      {
        "hostname": "maxst.icons8.com",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 2,
        "requestCount": 2,
        "transferBytes": 34674,
        "resourceTypes": [
          "stylesheet"
        ],
        "riskScore": 56
      },
      {
        "hostname": "maxcdn.icons8.com",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 2,
        "requestCount": 2,
        "transferBytes": 13160,
        "resourceTypes": [
          "stylesheet"
        ],
        "riskScore": 55
      },
      {
        "hostname": "halifax-hotspot.curbiq.io",
        "status": "not-green",
        "hostedBy": null,
        "pageCount": 1,
        "requestCount": 2,
        "transferBytes": 1629,
        "resourceTypes": [
          "script",
          "stylesheet"
        ],
        "riskScore": 47
      }
    ],
    "recurringUnknownProviders": []
  },
  "formValidationSummary": {
    "wsgReference": {
      "title": "Validate form errors and account for tooling requirements",
      "url": "https://www.w3.org/TR/web-sustainability-guidelines/#validate-form-errors-and-account-for-tooling-requirements"
    },
    "uniqueElementSignaturesAssessed": 40,
    "totalOccurrences": 150,
    "reusedFromCacheCount": 106,
    "recurringElements": [
      {
        "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
        "role": "search",
        "controlType": "search",
        "fieldName": "keys",
        "score": 30,
        "urgency": "medium",
        "pageCount": 99,
        "occurrenceCount": 99
      },
      {
        "signature": "search|get|/search/content|input|text|keys|no-autocomplete|optional|no-pattern|no-minlength",
        "role": "search",
        "controlType": "text",
        "fieldName": "keys",
        "score": 60,
        "urgency": "high",
        "pageCount": 3,
        "occurrenceCount": 3
      },
      {
        "signature": "no-form|input|radio|c-search-meetings-form__radio|no-autocomplete|optional|no-pattern|no-minlength",
        "role": "form",
        "controlType": "radio",
        "fieldName": "c-search-meetings-form__radio",
        "score": 50,
        "urgency": "medium",
        "pageCount": 2,
        "occurrenceCount": 2
      },
      {
        "signature": "form|get|/city-hall/agendas-meetings-reports|select|select|category|no-autocomplete|optional|no-pattern|no-minlength",
        "role": "form",
        "controlType": "select",
        "fieldName": "category",
        "score": 50,
        "urgency": "medium",
        "pageCount": 2,
        "occurrenceCount": 2
      },
      {
        "signature": "search|get|/search/content|select|select|filter_by|no-autocomplete|optional|no-pattern|no-minlength",
        "role": "search",
        "controlType": "select",
        "fieldName": "filter_by",
        "score": 50,
        "urgency": "medium",
        "pageCount": 2,
        "occurrenceCount": 2
      },
      {
        "signature": "form|get|/home/online-services|input|text|ols|no-autocomplete|optional|no-pattern|no-minlength",
        "role": "form",
        "controlType": "text",
        "fieldName": "ols",
        "score": 30,
        "urgency": "medium",
        "pageCount": 2,
        "occurrenceCount": 2
      },
      {
        "signature": "form|get|/city-hall/agendas-meetings-reports|input|date|start|off|optional|no-pattern|no-minlength",
        "role": "form",
        "controlType": "date",
        "fieldName": "start",
        "score": 20,
        "urgency": "low",
        "pageCount": 2,
        "occurrenceCount": 2
      },
      {
        "signature": "form|get|/city-hall/agendas-meetings-reports|input|date|end|off|optional|no-pattern|no-minlength",
        "role": "form",
        "controlType": "date",
        "fieldName": "end",
        "score": 20,
        "urgency": "low",
        "pageCount": 2,
        "occurrenceCount": 2
      }
    ],
    "recurringSearchElements": [
      {
        "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
        "role": "search",
        "controlType": "search",
        "fieldName": "keys",
        "score": 30,
        "urgency": "medium",
        "pageCount": 99,
        "occurrenceCount": 99
      },
      {
        "signature": "search|get|/search/content|input|text|keys|no-autocomplete|optional|no-pattern|no-minlength",
        "role": "search",
        "controlType": "text",
        "fieldName": "keys",
        "score": 60,
        "urgency": "high",
        "pageCount": 3,
        "occurrenceCount": 3
      },
      {
        "signature": "search|get|/search/content|select|select|filter_by|no-autocomplete|optional|no-pattern|no-minlength",
        "role": "search",
        "controlType": "select",
        "fieldName": "filter_by",
        "score": 50,
        "urgency": "medium",
        "pageCount": 2,
        "occurrenceCount": 2
      }
    ]
  },
  "metadataSummary": {
    "wsgReference": {
      "title": "Structure metadata for machine readability",
      "url": "https://www.w3.org/TR/web-sustainability-guidelines/#structure-metadata-for-machine-readability"
    },
    "assessedPages": 100,
    "averageScore": 0.3,
    "highUrgencyPages": 0,
    "missing": {
      "missingLang": 0,
      "missingDescription": 1,
      "missingCanonical": 0,
      "missingOpenGraphCore": 1,
      "missingTwitterCard": 1,
      "invalidStructuredData": 0
    }
  },
  "layoutSupportSummary": {
    "wsgReference": {
      "title": "Ensure layouts work for different devices and requirements",
      "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-layouts-work-for-different-devices-and-requirements"
    },
    "assessedPages": 100,
    "averageScore": 30.27,
    "highUrgencyPages": 0,
    "mobileOverflowPages": 0,
    "tabletOverflowPages": 0,
    "totalMobileSmallTapTargets": 7818,
    "totalTabletSmallTapTargets": 8693,
    "totalFixedWidthOffenders": 11,
    "pagesWithGridOverflow": 1,
    "totalGridOverflowContainers": 1,
    "totalGridContainersDetected": 87
  },
  "securityLightSummary": {
    "wsgReference": {
      "title": "Ensure that your code is secure",
      "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-that-your-code-is-secure"
    },
    "assessedPages": 100,
    "averageScore": 58.92,
    "highUrgencyPages": 0,
    "pagesWithoutCsp": 100,
    "pagesWithoutHsts": 100,
    "pagesWithVulnerableLibraries": 0,
    "totalExternalScriptsWithoutIntegrity": 4968
  },
  "dependencyMaintenanceSummary": {
    "wsgReference": {
      "title": "Use dependencies appropriately and ensure maintenance",
      "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
    },
    "assessedPages": 100,
    "averageScore": 9.92,
    "highUrgencyPages": 0,
    "pagesWithVulnerableDependencies": 0,
    "totalVulnerableDependencies": 0,
    "topRecurringLibraries": []
  },
  "expectedFilesSummary": {
    "wsgReference": {
      "title": "Include expected and beneficial files",
      "url": "https://www.w3.org/TR/web-sustainability-guidelines/#include-expected-and-beneficial-files"
    },
    "assessedPages": 100,
    "averageScore": 50.1,
    "highUrgencyPages": 1,
    "missing": {
      "robotsTxt": 1,
      "sitemapXml": 99,
      "securityTxt": 100,
      "webManifest": 100,
      "favicon": 100
    }
  },
  "compressionSummary": {
    "wsgReference": {
      "title": "Reduce data transfer with compression",
      "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
    },
    "assessedPages": 100,
    "averageScore": 17.58,
    "highUrgencyPages": 1,
    "pagesMissingTextCompression": 3,
    "totalEstimatedSavingsBytes": 36475553.95000001,
    "recurringOpportunities": [
      {
        "id": "modern-image-formats",
        "title": "Use modern image compression formats",
        "urgency": "high",
        "pageCount": 100,
        "totalEstimatedSavingsBytes": 23074410.950000003
      },
      {
        "id": "uses-optimized-images",
        "title": "Improve image encoding quality/size",
        "urgency": "high",
        "pageCount": 99,
        "totalEstimatedSavingsBytes": 6299519
      },
      {
        "id": "unminified-css",
        "title": "Minify CSS before transfer",
        "urgency": "medium",
        "pageCount": 99,
        "totalEstimatedSavingsBytes": 3846744
      },
      {
        "id": "unminified-javascript",
        "title": "Minify JavaScript before transfer",
        "urgency": "high",
        "pageCount": 99,
        "totalEstimatedSavingsBytes": 3235071
      },
      {
        "id": "uses-text-compression",
        "title": "Enable Brotli/gzip for text assets",
        "urgency": "low",
        "pageCount": 3,
        "totalEstimatedSavingsBytes": 19809
      }
    ]
  },
  "optimizationSummary": {
    "wsgReference": {
      "title": "Use the most efficient solution for your service",
      "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
    },
    "assessedPages": 100,
    "averageScore": 100,
    "highUrgencyPages": 100,
    "totalEstimatedSavingsBytes": 103767950.94999999,
    "totalEstimatedBlockingMs": 136609,
    "recurringOpportunities": [
      {
        "id": "unused-javascript",
        "title": "Remove unused JavaScript",
        "pageCount": 100,
        "totalEstimatedSavingsBytes": 28633961,
        "totalEstimatedBlockingMs": 0
      },
      {
        "id": "modern-image-formats",
        "title": "Serve images in next-gen formats",
        "pageCount": 100,
        "totalEstimatedSavingsBytes": 23074410.950000003,
        "totalEstimatedBlockingMs": 0
      },
      {
        "id": "unused-css-rules",
        "title": "Remove unused CSS",
        "pageCount": 100,
        "totalEstimatedSavingsBytes": 17346148,
        "totalEstimatedBlockingMs": 0
      },
      {
        "id": "offscreen-images",
        "title": "Lazy-load offscreen images",
        "pageCount": 99,
        "totalEstimatedSavingsBytes": 10511814,
        "totalEstimatedBlockingMs": 0
      },
      {
        "id": "uses-optimized-images",
        "title": "Compress oversized image assets",
        "pageCount": 99,
        "totalEstimatedSavingsBytes": 6299519,
        "totalEstimatedBlockingMs": 0
      },
      {
        "id": "unminified-css",
        "title": "Minify CSS",
        "pageCount": 99,
        "totalEstimatedSavingsBytes": 3846744,
        "totalEstimatedBlockingMs": 0
      },
      {
        "id": "unminified-javascript",
        "title": "Minify JavaScript",
        "pageCount": 99,
        "totalEstimatedSavingsBytes": 3235071,
        "totalEstimatedBlockingMs": 0
      },
      {
        "id": "render-blocking-resources",
        "title": "Eliminate render-blocking resources",
        "pageCount": 99,
        "totalEstimatedSavingsBytes": 0,
        "totalEstimatedBlockingMs": 136609
      },
      {
        "id": "uses-responsive-images",
        "title": "Right-size images for viewport",
        "pageCount": 21,
        "totalEstimatedSavingsBytes": 10800474,
        "totalEstimatedBlockingMs": 0
      },
      {
        "id": "uses-text-compression",
        "title": "Enable text compression",
        "pageCount": 3,
        "totalEstimatedSavingsBytes": 19809,
        "totalEstimatedBlockingMs": 0
      }
    ]
  },
  "offlineSupportSummary": {
    "wsgReference": {
      "title": "Optimize caching and support offline access",
      "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
    },
    "assessedPages": 100,
    "averageScore": 100,
    "highUrgencyPages": 100,
    "pagesWithoutServiceWorker": 100,
    "pagesWithoutOfflineSupport": 100,
    "pagesWithWeakCacheTtl": 100,
    "recurringOpportunities": [
      {
        "id": "service-worker",
        "title": "Add service worker support",
        "urgency": "high",
        "pageCount": 100
      },
      {
        "id": "works-offline",
        "title": "Ensure critical routes work offline",
        "urgency": "high",
        "pageCount": 100
      },
      {
        "id": "installable-manifest",
        "title": "Improve web app manifest support",
        "urgency": "medium",
        "pageCount": 100
      },
      {
        "id": "uses-long-cache-ttl",
        "title": "Strengthen static asset cache TTL",
        "urgency": "medium",
        "pageCount": 100
      },
      {
        "id": "offline-start-url",
        "title": "Support offline start URL behavior",
        "urgency": "medium",
        "pageCount": 100
      }
    ]
  },
  "languageVersionSummary": {
    "wsgReference": {
      "title": "Use the latest stable language version",
      "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
    },
    "assessedPages": 100,
    "averageScore": 0,
    "highUrgencyPages": 0,
    "pagesWithOutdatedRuntimeSignals": 0,
    "pagesWithVersionDisclosure": 0,
    "topOutdatedSignals": []
  },
  "mediaHintsSummary": {
    "wsgReference": {
      "title": "Optimize media to reduce resource use",
      "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use"
    },
    "assessedPages": 100,
    "averageScore": 45.54,
    "highUrgencyPages": 0,
    "pagesWithAutoplay": 0,
    "pagesWithUnmutedAutoplay": 0,
    "pagesWithoutDarkMode": 100,
    "pagesWithLazyLoadingGap": 97
  },
  "gridAwareSummary": {
    "assessedPages": 100,
    "pagesWithDetection": 0,
    "detectedUrls": []
  },
  "wsgHighlightsSummary": {
    "assessedPages": 100,
    "averageScore": 60.2,
    "highlights": [
      {
        "guideline": "11.3",
        "title": "Incomplete media lazy loading",
        "urgency": "medium",
        "detail": "Only 1/16 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
        "wsid": "11.lazy loading",
        "assessor": "script",
        "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>",
        "pageCount": 100,
        "pages": {},
        "criteria": {
          "title": "Lazy loading",
          "description": "Incorporate lazy/deferred loading from the start: Consider which media elements are immediately required, and which would be better relegated to loading on specific user interaction. Load data-intensive media on the client side, including the media itself, behind a facade - a non-functional and static representational element.",
          "resources": [
            {
              "Avoid hotlinking images with Cross-Origin-Resource-Policy": "https://www.sjoerdlangkemper.nl/2024/11/27/avoid-hotlinking-images-with-corp-cross-origin-resource-policy/",
              "Fast load times: Optimize Your Images": "https://web.dev/explore/fast?hl=en#optimize-your-images",
              "GPF - General Policy Framework (PDF) - 4.1 - UX and UI (Autoplay)": "https://www.arcep.fr/uploads/tx_gspublication/general_policy_framework_for_the_ecodesign_of_digital_services_version_2024.pdf",
              "GR491 - 9-5071 - Autoplay": "https://gr491.isit-europe.org/en/crit.php?id=9-5071-frontend-active-content-uses-technical-resources-to-function.",
              "GR491 - 9-5068 - Lazy Loading": "https://gr491.isit-europe.org/en/crit.php?id=9-5068-frontend-when-loading-the-service-on-the-user",
              "GreenIT - 0051 - Use lazy loading": "https://rweb.greenit.fr/en/fiches/RWEB_0051-use-lazy-loading",
              "How to Defer Offscreen Images and Background Images": "https://www.debugbear.com/blog/defer-offscreen-images",
              "Lazy Load Background Images with the IntersectionObserver API": "https://www.debugbear.com/blog/lazy-load-background-images-intersection-observer",
              "Lazy load third-party resources with facades": "https://developer.chrome.com/docs/lighthouse/performance/third-party-facades?hl=en",
              "Lazy loading (Wikipedia)": "https://en.wikipedia.org/wiki/Lazy_loading",
              "Lazy loading (Performance)": "https://developer.mozilla.org/en-US/docs/Web/Performance/Guides/Lazy_loading",
              "Lazy Loading Images Based on Screen Size": "https://www.aaron-gustafson.com/notebook/lazy-loading-images-based-on-screen-size/",
              "Non-blocking cross-browser image rendering on the canvas": "https://calendar.perfplanet.com/2025/non-blocking-image-canvas/",
              "Web Almanac: Sustainability": "https://almanac.httparchive.org/en/2024/sustainability"
            }
          ],
          "guideline": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "benefits": [
            {
              "Economic": "Eliminating data-intensive media entirely and using alternatives such as transcripts reduce costs associated with hosting and data transfer.",
              "Environment": "Reducing the battery drain associated with loading data-intensive content by preventing auto-loading or delaying it until the moment it is required reduces energy emissions associated with data transfer and renering.",
              "Performance": "Tailoring user experience to the device, situation, and environment of the user by having different resolutions and quality formats available reduces wasted bandwidth. This can boost performance for users who make choices to reduce the data downloaded.",
              "Social Equity": "Providing alternatives to data-intensive media allows with limited bandwidth or older devices to access content."
            }
          ],
          "example": "<picture> \n  <source type=\"image/avif\" srcset=\"image.avif\">\n  <source type=\"image/webp\" srcset=\"image.webp\">\n  <img width=\"100px\" height=\"100px\" src=\"image.jpg\" alt=\"\" loading=\"lazy\"/>\n</picture>"
        }
      },
      {
        "guideline": "7.3",
        "title": "Multiple tracking scripts detected",
        "urgency": "medium",
        "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
        "wsid": "7.analytics and tracking",
        "assessor": "script",
        "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>",
        "pageCount": 100,
        "pages": {},
        "criteria": {
          "title": "Analytics and tracking",
          "description": "Evaluate and remove unnecessary or unused analytics and tracking, especially any operating without user consent.",
          "resources": [
            {
              "48 Cart Abandonment Rate Statistics 2023": "https://baymard.com/lists/cart-abandonment-rate",
              "Guide to using analytics for performance and privacy": "https://www.wholegraindigital.com/blog/guide-to-using-analytics-for-performance-and-privacy/",
              "Is GDPR Good for the Environment?": "https://www.mightybytes.com/insights/is-gdpr-good-for-the-environment/",
              "Learn Privacy": "https://web.dev/blog/introducing-learn-privacy?hl=en",
              "Review of Web Analytic Tools for Sustainable Design (PDF)": "https://www.techrxiv.org/users/708350/articles/692959/master/file/data/092900a237/092900a237.pdf",
              "Tracking Protection in Firefox For Privacy and Performance (PDF)": "https://www.ieee-security.org/TC/SPW2015/W2SP/papers/W2SP_2015_submission_32.pdf",
              "United Nations SDGS - Goal 1 - Poverty": "https://sdgs.un.org/goals/goal1#targets_and_indicators",
              "United Nations SDGS - Goal 3 - Health & Well-being": "https://sdgs.un.org/goals/goal3#targets_and_indicators",
              "Why you should stop using Google Analytics on your website": "https://plausible.io/blog/remove-google-analytics"
            }
          ],
          "guideline": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "7",
            "title": "Avoid being manipulative or deceptive",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "subheading": "Avoid using patterns, content, tools, or techniques that may artificially manipulate or deceive the user."
          },
          "benefits": [
            {
              "Accessibility": "Avoiding deceptive design patterns improves user experience for people using assistive technologies, as these can be especially disruptive when using a screen reader. This improves their trust and access to your content.",
              "Conversion": "Avoiding deceptive patterns can result in fewer complaints, reduce barriers, and improve conversion.",
              "Environment": "Avoiding deceptive design patterns reduces energy consumption because users do not waste time and energy trying to undo choices they never intended to make.",
              "Performance": "Using ethical, non-disruptive practices will accelerate the user journey and perceived speed and reduce unnecessary friction.",
              "Privacy": "Ensuring compliance with ethical privacy practices and avoiding dark and deceptive patterns reduces litigation risk. It also reduces data transmission between tracking and advertising services providers."
            }
          ],
          "example": null
        }
      },
      {
        "guideline": "2.4",
        "title": "Review User Journey Efficiency",
        "urgency": "investigate",
        "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
        "wsid": "2.minimize non-essential content",
        "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
        "assessor": "human",
        "pageCount": 100,
        "pages": {},
        "criteria": null
      },
      {
        "guideline": "2.6",
        "title": "Check for Engagement Traps",
        "urgency": "investigate",
        "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
        "wsid": "2.design to assist not distract",
        "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
        "assessor": "human",
        "pageCount": 100,
        "pages": {},
        "criteria": null
      },
      {
        "guideline": "2.7",
        "title": "Audit for Deceptive Design Patterns",
        "urgency": "investigate",
        "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
        "wsid": "2.avoid manipulative deceptive",
        "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
        "assessor": "human",
        "pageCount": 100,
        "pages": {},
        "criteria": null
      },
      {
        "guideline": "2.14",
        "title": "Verify Accessible Alternatives for All Media",
        "urgency": "investigate",
        "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
        "wsid": "2.offer suitable alternatives",
        "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
        "assessor": "human",
        "pageCount": 100,
        "pages": {},
        "criteria": null
      },
      {
        "guideline": "2.18",
        "title": "Confirm User Research Was Conducted",
        "urgency": "investigate",
        "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
        "wsid": "2.involve users early",
        "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
        "assessor": "human",
        "pageCount": 100,
        "pages": {},
        "criteria": null
      },
      {
        "guideline": "2.10",
        "title": "Review Content Conciseness",
        "urgency": "investigate",
        "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
        "wsid": "2.provide clear inclusive content",
        "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
        "assessor": "ai",
        "pageCount": 100,
        "pages": {},
        "criteria": null
      },
      {
        "guideline": "4.4",
        "title": "Verify Error Pages and Redirects Are Configured",
        "urgency": "investigate",
        "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
        "wsid": "4.error pages redirection",
        "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
        "assessor": "human",
        "pageCount": 100,
        "pages": {},
        "criteria": null
      },
      {
        "guideline": "4.10",
        "title": "Review CDN Usage and Geographic Distribution",
        "urgency": "investigate",
        "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
        "wsid": "4.content delivery networks",
        "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
        "assessor": "human",
        "pageCount": 100,
        "pages": {},
        "criteria": null
      },
      {
        "guideline": "5.2",
        "title": "Confirm a Sustainability Advocate Is Assigned",
        "urgency": "investigate",
        "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
        "wsid": "5.assign sustainability advocate",
        "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
        "assessor": "human",
        "pageCount": 100,
        "pages": {},
        "criteria": null
      },
      {
        "guideline": "5.8",
        "title": "Check for a Public Sustainability Statement",
        "urgency": "investigate",
        "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
        "wsid": "5.support mandatory disclosures",
        "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
        "assessor": "human",
        "pageCount": 100,
        "pages": {},
        "criteria": null
      },
      {
        "guideline": "12.3",
        "title": "No reduced motion support",
        "urgency": "low",
        "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
        "wsid": "12.control animation",
        "assessor": "script",
        "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}",
        "pageCount": 99,
        "pages": {},
        "criteria": {
          "title": "Control animation",
          "description": "Allow users to start, stop, pause, or otherwise control animated content.",
          "resources": [
            {
              "Accessible Web Animation": "https://css-tricks.com/accessible-web-animation-the-wcag-on-animation-explained/",
              "Animated sites are unique, but not always accessible": "https://uxdesign.cc/animated-sites-are-unique-but-not-always-accessible-5af54fefa092",
              "Animation and motion": "https://web.dev/learn/accessibility/motion?hl=en-us",
              "Animation that fails safely": "https://adobe.design/stories/leading-design/animation-that-fails-safely-defensive-design-for-motion-sensitive-users",
              "GPF - General Policy Framework (PDF) - 4.1 - UX and UI (Autoplay)": "https://www.arcep.fr/uploads/tx_gspublication/general_policy_framework_for_the_ecodesign_of_digital_services_version_2024.pdf",
              "GPF - General Policy Framework (PDF) - 4.6 - UX and UI (Informational Media)": "https://www.arcep.fr/uploads/tx_gspublication/general_policy_framework_for_the_ecodesign_of_digital_services_version_2024.pdf",
              "GR491 - 7-5051 - Animation Frequency": "https://gr491.isit-europe.org/en/crit.php?id=7-5051-frontend-the-presentation-of-operations-on-the-front",
              "Let users pause/stop/hide animation": "https://marcom.wwu.edu/accessibility/guide/pause-stop-hide-animation",
              "prefers-reduced-motion: Sometimes less movement is more": "https://web.dev/articles/prefers-reduced-motion?hl=en",
              "Respecting Users' Motion Preferences": "https://www.smashingmagazine.com/2021/10/respecting-users-motion-preferences/"
            }
          ],
          "guideline": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "12",
            "title": "Ensure animation is proportionate and easy to control",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-animation-is-proportionate-and-easy-to-control",
            "subheading": "Ensure any animation deemed necessary is not overdone and that the user can control its ability to run."
          },
          "benefits": [
            {
              "Environment": "Disabling and reducing animation to the essential, with appropriate optimization and user control, reduces rendering impact and associated emissions.",
              "Performance": "Compressing, removing, or otherwise reducing animation files reduces complexity, improving performance.",
              "Social Equity": "Catering to different perspectives on and preferences in relation to animation can improve acceptance and access for individuals using different devices and from different backgrounds."
            }
          ],
          "example": "@media (prefers-reduced-motion: reduce) {\r\n\tbody *,\r\n\tbody *::before,\r\n\tbody *::after {\r\n\t\tanimation-delay: -1ms !important;\r\n\t\tanimation-duration: 1ms !important;\r\n\t\tanimation-iteration-count: 1 !important;\r\n\t\tbackground-attachment: initial !important;\r\n\t\ttransition-duration: 1ms !important;\r\n\t\ttransition-delay: -1ms !important;\r\n\t\tscroll-behavior: auto !important;\r\n\t}\r\n}"
        }
      }
    ]
  },
  "siteGuidance": {
    "siteCount": 2,
    "singleSiteScan": false,
    "sites": [
      {
        "origin": "https://www.halifax.ca",
        "pageCount": 99,
        "sharedRecommendations": [
          {
            "area": "expected-files",
            "urgency": "medium",
            "title": "Add sitemap.xml at site origin",
            "detail": "sitemap.xml is missing for all sampled pages on https://www.halifax.ca."
          },
          {
            "area": "expected-files",
            "urgency": "low",
            "title": "Publish .well-known/security.txt",
            "detail": ".well-known/security.txt is missing for all sampled pages on https://www.halifax.ca."
          },
          {
            "area": "security-headers",
            "urgency": "high",
            "title": "Apply Content-Security-Policy site-wide",
            "detail": "CSP is absent across all sampled pages on https://www.halifax.ca."
          },
          {
            "area": "security-headers",
            "urgency": "medium",
            "title": "Enable Strict-Transport-Security site-wide",
            "detail": "HSTS is missing across all sampled HTTPS pages on https://www.halifax.ca."
          },
          {
            "area": "offline-support",
            "urgency": "high",
            "title": "Introduce service worker support",
            "detail": "No sampled pages on https://www.halifax.ca indicate service worker support for offline resilience."
          },
          {
            "area": "offline-support",
            "urgency": "high",
            "title": "Support offline fallback behavior",
            "detail": "Offline page behavior was not detected across sampled pages on https://www.halifax.ca."
          },
          {
            "area": "optimization",
            "urgency": "medium",
            "title": "Fix recurring optimization bloat at shared layer",
            "detail": "Remove unused JavaScript recurs across 99 pages on https://www.halifax.ca (est. 27.16 MB aggregate savings)."
          },
          {
            "area": "compression",
            "urgency": "high",
            "title": "Prioritize recurring compression fixes",
            "detail": "Use modern image compression formats recurs across 99 pages on https://www.halifax.ca (est. 21.96 MB aggregate savings)."
          },
          {
            "area": "offline-support",
            "urgency": "high",
            "title": "Prioritize recurring offline/caching improvements",
            "detail": "Add service worker support is needed across 99 pages on https://www.halifax.ca."
          }
        ],
        "recurringCompression": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "pageCount": 99,
            "totalEstimatedSavingsBytes": 23025097.400000002
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "pageCount": 99,
            "totalEstimatedSavingsBytes": 6299519
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "pageCount": 99,
            "totalEstimatedSavingsBytes": 3846744
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "pageCount": 99,
            "totalEstimatedSavingsBytes": 3235071
          },
          {
            "id": "uses-text-compression",
            "title": "Enable Brotli/gzip for text assets",
            "urgency": "low",
            "pageCount": 3,
            "totalEstimatedSavingsBytes": 19809
          }
        ],
        "recurringOptimization": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "pageCount": 99,
            "totalEstimatedSavingsBytes": 28477273,
            "totalEstimatedBlockingMs": 0
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "pageCount": 99,
            "totalEstimatedSavingsBytes": 23025097.400000002,
            "totalEstimatedBlockingMs": 0
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "pageCount": 99,
            "totalEstimatedSavingsBytes": 17302546,
            "totalEstimatedBlockingMs": 0
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "pageCount": 99,
            "totalEstimatedSavingsBytes": 6299519,
            "totalEstimatedBlockingMs": 0
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "pageCount": 99,
            "totalEstimatedSavingsBytes": 3846744,
            "totalEstimatedBlockingMs": 0
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "pageCount": 99,
            "totalEstimatedSavingsBytes": 3235071,
            "totalEstimatedBlockingMs": 0
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "pageCount": 98,
            "totalEstimatedSavingsBytes": 10508887,
            "totalEstimatedBlockingMs": 0
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "pageCount": 98,
            "totalEstimatedSavingsBytes": 0,
            "totalEstimatedBlockingMs": 136438
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "pageCount": 21,
            "totalEstimatedSavingsBytes": 10800474,
            "totalEstimatedBlockingMs": 0
          },
          {
            "id": "uses-text-compression",
            "title": "Enable text compression",
            "pageCount": 3,
            "totalEstimatedSavingsBytes": 19809,
            "totalEstimatedBlockingMs": 0
          }
        ],
        "recurringOfflineOpportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "pageCount": 99
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "pageCount": 99
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "pageCount": 99
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "pageCount": 99
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "pageCount": 99
          }
        ],
        "recurringDependencies": [],
        "recurringRuntimeSignals": [],
        "pageSpecific": [
          {
            "url": "https://www.halifax.ca/city-hall/budget-finances/budget",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 63,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 2.04 MB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.74 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 39.67 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/suburbanplan",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 48,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 3.11 MB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "high",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 690.97 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 62.02 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/node/4561",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 47,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 46,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 816.83 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "high",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 368.07 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 65.07 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 46,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 46,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 817.20 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "high",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 368.42 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 65.12 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/transportation/parking/parking-tickets",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 40,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 318.48 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "high",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 242.94 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.95 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/city-hall",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 40,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 550.75 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "high",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 223.84 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 56.41 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home-property",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 35,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 468.79 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "high",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 164.86 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 56.42 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/business",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 35,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 426.38 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "high",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 174.21 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 56.45 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/parks-recreation",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 35,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 415.47 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "high",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 160.66 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 56.46 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/parks-recreation/events",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 35,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 492.48 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "high",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 113.17 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 126.79 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.77 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 34,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 391.08 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 151.34 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 23.19 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/parks-recreation/programs-activities/recreation-activities",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 33,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 413.92 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 71.65 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.54 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/transportation/parking/street-parking",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 32,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 558.79 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.95 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.88 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/myrec",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 32,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 413.92 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 71.65 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 67.78 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home/311",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 31,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 462.39 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 119.90 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 62.07 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/transportation",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 28,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 301.57 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 95.84 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 56.42 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 23.84 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/safety-security",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 28,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 279.08 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 103.68 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 56.43 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/business/planning-development/planning-subdivision-applications",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 27,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 321.69 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 49.94 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.60 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home/news",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 27,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 289.71 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.53 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 30.33 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 36.55 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/regional-community-planning/shape-your-city",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 25,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.33 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.99 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.86 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/environment-climate-change/halifact-acting-climate-together",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 25,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 934.63 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.72 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 30.76 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/regional-community-planning/helping-address-homelessness?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Addressing_Homelessness",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 22,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.25 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.90 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/parks-recreation/halifax-youth/youth-services-plan",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 25,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 46,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 252.82 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 55.34 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.96 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/fire-police/fire/emergency-management",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 25,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 45,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 268.46 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 64.81 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/transportation/cycling-walking",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 35,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 34,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 239.38 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "high",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 187.56 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.93 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/diversity-inclusion/accessibility",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 21,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 46,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 152.10 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 65.38 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 64.89 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/fire-police/fire-emergency-management/emergency-management/emergency-preparedness/voluntary",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 23,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 44,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 139.39 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 98.63 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 59.15 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/business/doing-business-halifax/garbage-recycling-businesses",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 16,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 339.49 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.95 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.85 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/business/doing-business-halifax/procurement",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 16,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 125.24 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.92 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home-property/urban-forestry",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 14,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 72.69 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.38 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 34.65 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home-property/garbage-recycling-green-cart/collection-schedules-what-goes-where",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 14,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.33 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 62.04 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.86 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/affordable-access-program?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=AAP",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 14,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 64.88 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 58.37 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 33.61 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/affordable-access-program",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 13,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 58.39 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.84 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 33.64 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/safety-security/public-safety-strategy-programs",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 13,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 65.07 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.57 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 35.14 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/business/business-parks",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 13,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 59.23 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.39 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 31.09 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/city-hall/mayor-andy-fillmore",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 13,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 58.25 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.23 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 34.63 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home-property/municipal-payments/making-a-payment",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 13,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 62.00 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 53.38 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 33.19 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/employment/work-halifax-regional-municipality?utm_source=Home_Page&amp;utm_medium=Banner&amp;utm_campaign=Recruitment",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 13,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 205.77 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 80.61 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.72 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home/stay-informed/",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 12,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 59.08 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.92 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 36.55 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/safety-security/crossing-guard-program",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 12,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 70.52 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/parks-recreation/programs-activities/recreation-centres-your-community",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 12,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 71.91 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.80 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.86 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "low",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 19.50 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home-property/garbage-recycling-green-cart/garbage-collection?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Solid_Waste",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 12,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 570.08 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 64.93 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/volunteering",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.47 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 39.84 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/city-hall/legislation-by-laws/public-notices",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 59.15 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home-property/property-taxes",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.22 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 40.87 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/regional-community-planning/short-term-rentals",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 59.14 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/transportation/parking",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 51.44 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.88 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/transportation/streets-sidewalks",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.46 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 41.07 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.86 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/business/real-estate-land-management",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.41 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 40.73 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/city-hall/budget-finances",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 37.13 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 39.13 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.83 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/city-hall/strategic-plan",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 283.85 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.92 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 34.10 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/transportation/parking?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Parking",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 51.46 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.79 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/parks-recreation/programs-activities/inclusion-support-advisory-group",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 23.10 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 48.62 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home-property/animal-services",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 10,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.31 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.70 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.87 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/city-hall/elections/2024-election-results",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 10,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.52 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/city-hall/boards-committees-commissions",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 10,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.77 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.65 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/transportation/transportation-projects/windsor-street-exchange-redevelopment-project",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 10,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.81 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.65 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home/online-services",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 9,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 26.71 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 20.45 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home-property/civic-addressing",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 9,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "low",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 17.19 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/business/doing-business-halifax",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 9,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.73 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/city-hall/legislation-by-laws",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 9,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.88 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.61 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/online-services",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 9,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 26.71 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 20.68 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/regional-community-planning/housing-accelerator-fund/second-unit-incentive",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 9,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.65 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.61 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/fire-police/emergency-management/hfxalert",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 13,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 45,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 268.43 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 62.00 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/transportation/halifax-transit/routes-schedules?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Transit",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 12,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 46,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 61.99 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 39.07 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home-property/garbage-recycling-green-cart",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 23,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 34,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 180.64 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 124.60 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.32 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home-property/building-development-permits/alarm-registration",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 7,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 39.47 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 29.04 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.70 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.86 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/regional-community-planning/construction-projects/cogswell-district-redevelopment-0",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 7,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 61.99 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 52.15 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 32.03 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/business/filming-halifax",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 7,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 20.01 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.65 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/business/planning-development",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 13,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 44,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "high",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 113.16 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 64.32 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 37.14 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 30.91 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/city-hall/regional-council",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 7,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.25 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 40.53 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/transportation/halifax-transit/routes-schedules",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 10,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 46,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.88 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 39.04 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/city-hall/agendas-meetings-reports?category=127",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 6,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.25 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 67.89 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 31.68 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/transportation/winter-operations",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 12,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 43,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 53.24 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.22 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 29.05 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/city-hall/agendas-meetings-reports",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 5,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.28 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.68 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 30.33 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/safety-security/police/reporting-crime",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 44,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 62.00 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 38.43 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/employment",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 43,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.98 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 49.69 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 30.03 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/safety-security/halifax-district-rcmp",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 11,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 43,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.89 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 46.69 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 30.18 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/home-property/building-development-permits",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 15,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 38,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 92.78 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 39.92 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 35.80 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/safety-security/police/crime-mapping",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 9,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 44,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.90 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/parks-recreation/arts-culture-heritage",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 10,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 43,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.72 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 42.84 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/environment-climate-change",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 14,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 38,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 81.84 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.99 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 34.60 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/municipal-archives",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 8,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 43,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 50.47 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 40.20 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/fire-police/fire/recruitment/volunteer-firefighter-recruitment",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 6,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 45,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.34 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 64.96 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.87 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/business/licences",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 17,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 34,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 115.71 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 44.94 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.75 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/safety-security/fire-emergency/recruitment-volunteers",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 6,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 45,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.28 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.87 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/safety-security/police",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 12,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 38,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 56.39 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.25 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 31.72 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/parks-recreation/facility-rentals-bookings-field-conditions",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 10,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 39,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "high",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 113.16 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.47 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 48.37 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/transportation/your-trip",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 5,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 43,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 59.51 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.73 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/parks-recreation/programs-activities",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 16,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 32,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "high",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 108.36 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 124.81 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 57.69 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 37.15 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/regional-community-planning",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 13,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 34,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 57.49 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.48 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 37.30 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/transportation/halifax-transit",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 21,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 26,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "high",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 113.18 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 136.46 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 49.44 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 37.09 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/safety-security/emergency-management",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 16,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 30,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 100.78 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 45.13 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.91 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/parks-recreation/parks-trails-gardens",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 16,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 29,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "high",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 113.17 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 91.42 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.68 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 33.17 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/parks-recreation/halifax-youth",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 24,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 20,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 191.28 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 83.49 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.52 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/parks-recreation/programs-activities/outdoor-recreation/emera-oval",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 19,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 24,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "high",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 327.06 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 59.69 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 37.39 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/about-halifax/diversity-inclusion",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 18,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 24,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 128.33 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 46.09 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.82 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/safety-security/fire-emergency",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 15,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 20,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "high",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 119.20 KB."
              },
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 114.25 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "medium",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 53.46 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.58 KB."
              }
            ]
          },
          {
            "url": "https://www.halifax.ca/city-hall/districts-councillors",
            "securityScore": 59,
            "dependencyScore": 10,
            "expectedFilesScore": 50,
            "compressionScore": 13,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 20,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "medium",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 71.52 KB."
              },
              {
                "title": "Minify JavaScript before transfer",
                "urgency": "medium",
                "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
              },
              {
                "title": "Minify CSS before transfer",
                "urgency": "medium",
                "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.90 KB."
              },
              {
                "title": "Improve image encoding quality/size",
                "urgency": "low",
                "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 35.79 KB."
              }
            ]
          }
        ]
      },
      {
        "origin": "https://fr.halifax.ca",
        "pageCount": 1,
        "sharedRecommendations": [
          {
            "area": "expected-files",
            "urgency": "high",
            "title": "Add robots.txt at site origin",
            "detail": "robots.txt is missing for all sampled pages on https://fr.halifax.ca."
          },
          {
            "area": "expected-files",
            "urgency": "low",
            "title": "Publish .well-known/security.txt",
            "detail": ".well-known/security.txt is missing for all sampled pages on https://fr.halifax.ca."
          },
          {
            "area": "security-headers",
            "urgency": "high",
            "title": "Apply Content-Security-Policy site-wide",
            "detail": "CSP is absent across all sampled pages on https://fr.halifax.ca."
          },
          {
            "area": "security-headers",
            "urgency": "medium",
            "title": "Enable Strict-Transport-Security site-wide",
            "detail": "HSTS is missing across all sampled HTTPS pages on https://fr.halifax.ca."
          },
          {
            "area": "offline-support",
            "urgency": "high",
            "title": "Introduce service worker support",
            "detail": "No sampled pages on https://fr.halifax.ca indicate service worker support for offline resilience."
          },
          {
            "area": "offline-support",
            "urgency": "high",
            "title": "Support offline fallback behavior",
            "detail": "Offline page behavior was not detected across sampled pages on https://fr.halifax.ca."
          }
        ],
        "recurringCompression": [],
        "recurringOptimization": [],
        "recurringOfflineOpportunities": [],
        "recurringDependencies": [],
        "recurringRuntimeSignals": [],
        "pageSpecific": [
          {
            "url": "https://www.halifax.ca/fr",
            "securityScore": 51,
            "dependencyScore": 2,
            "expectedFilesScore": 60,
            "compressionScore": 8,
            "optimizationScore": 100,
            "offlineScore": 100,
            "languageScore": 0,
            "mediaHintsScore": 50,
            "urgency": "high",
            "topRecommendations": [
              {
                "title": "Use modern image compression formats",
                "urgency": "low",
                "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 48.16 KB."
              },
              {
                "title": "Remove unused JavaScript",
                "urgency": "medium",
                "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 153.02 KB."
              },
              {
                "title": "Remove unused CSS",
                "urgency": "medium",
                "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 42.58 KB."
              },
              {
                "title": "Serve images in next-gen formats",
                "urgency": "low",
                "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 48.16 KB."
              }
            ]
          }
        ]
      }
    ]
  },
  "crossPagePatterns": {
    "heavyAssetPatterns": [
      {
        "key": "script|www.googletagmanager.com|/gtm.js",
        "label": "script assets from www.googletagmanager.com/gtm.js",
        "resourceType": "script",
        "domain": "www.googletagmanager.com",
        "pageCount": 100,
        "totalTransferBytes": 16301002,
        "exampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
      },
      {
        "key": "script|www.googletagmanager.com|/gtag",
        "label": "script assets from www.googletagmanager.com/gtag",
        "resourceType": "script",
        "domain": "www.googletagmanager.com",
        "pageCount": 99,
        "totalTransferBytes": 45449684,
        "exampleUrl": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0"
      },
      {
        "key": "stylesheet|cdn.halifax.ca|/themes",
        "label": "stylesheet assets from cdn.halifax.ca/themes",
        "resourceType": "stylesheet",
        "domain": "cdn.halifax.ca",
        "pageCount": 27,
        "totalTransferBytes": 4413094,
        "exampleUrl": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c"
      },
      {
        "key": "image|cdn.halifax.ca|/sites",
        "label": "image assets from cdn.halifax.ca/sites",
        "resourceType": "image",
        "domain": "cdn.halifax.ca",
        "pageCount": 21,
        "totalTransferBytes": 17577551,
        "exampleUrl": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/home/2026/2026-27-municipal-budget_homepage_cover-photo-1.jpg?itok=hmpqZ3ln"
      },
      {
        "key": "image|www.halifax.ca|/themes",
        "label": "image assets from www.halifax.ca/themes",
        "resourceType": "image",
        "domain": "www.halifax.ca",
        "pageCount": 18,
        "totalTransferBytes": 4459590,
        "exampleUrl": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png"
      },
      {
        "key": "script|www.youtube.com|/s",
        "label": "script assets from www.youtube.com/s",
        "resourceType": "script",
        "domain": "www.youtube.com",
        "pageCount": 9,
        "totalTransferBytes": 12116202,
        "exampleUrl": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js"
      },
      {
        "key": "stylesheet|www.youtube.com|/s",
        "label": "stylesheet assets from www.youtube.com/s",
        "resourceType": "stylesheet",
        "domain": "www.youtube.com",
        "pageCount": 9,
        "totalTransferBytes": 907280,
        "exampleUrl": "https://www.youtube.com/s/player/8456c9de/www-player.css"
      },
      {
        "key": "script|cdn.halifax.ca|/libraries",
        "label": "script assets from cdn.halifax.ca/libraries",
        "resourceType": "script",
        "domain": "cdn.halifax.ca",
        "pageCount": 7,
        "totalTransferBytes": 1721933,
        "exampleUrl": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c"
      },
      {
        "key": "script|www.gstatic.com|/_",
        "label": "script assets from www.gstatic.com/_",
        "resourceType": "script",
        "domain": "www.gstatic.com",
        "pageCount": 5,
        "totalTransferBytes": 1338980,
        "exampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en.TuA4apAhcxY.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9haMAs0bVgvcC8c3crM4zZTMlg8LQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b"
      },
      {
        "key": "script|apis.google.com|/_",
        "label": "script assets from apis.google.com/_",
        "resourceType": "script",
        "domain": "apis.google.com",
        "pageCount": 5,
        "totalTransferBytes": 552201,
        "exampleUrl": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.lb.en.PJsh2cctCQI.O/m=client/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_QlMhY2cycn60Rs8eI1WInRwuahw/cb=gapi.loaded_0?le=scs,fedcm_migration_mod"
      }
    ],
    "recurringTargets": [
      {
        "title": "Split JavaScript by route or interaction",
        "urgency": "high",
        "pageCount": 100,
        "totalEstimatedSavingsBytes": 28633961,
        "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand."
      },
      {
        "title": "Defer non-critical UI modules until after first render",
        "urgency": "high",
        "pageCount": 99,
        "totalEstimatedSavingsBytes": 0,
        "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later."
      },
      {
        "title": "Lazy-load offscreen images and media galleries",
        "urgency": "high",
        "pageCount": 98,
        "totalEstimatedSavingsBytes": 10508887,
        "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section."
      },
      {
        "title": "Modularize heavy script asset from www.googletagmanager.com",
        "urgency": "medium",
        "pageCount": 85,
        "totalEstimatedSavingsBytes": 13855936,
        "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles."
      },
      {
        "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
        "urgency": "medium",
        "pageCount": 21,
        "totalEstimatedSavingsBytes": 3432364,
        "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered."
      },
      {
        "title": "Modularize heavy image asset from cdn.halifax.ca",
        "urgency": "high",
        "pageCount": 19,
        "totalEstimatedSavingsBytes": 10670803,
        "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component."
      },
      {
        "title": "Modularize heavy image asset from www.halifax.ca",
        "urgency": "medium",
        "pageCount": 16,
        "totalEstimatedSavingsBytes": 3964080,
        "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component."
      },
      {
        "title": "Modularize heavy script asset from www.youtube.com",
        "urgency": "high",
        "pageCount": 9,
        "totalEstimatedSavingsBytes": 4353151,
        "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles."
      },
      {
        "title": "Modularize heavy script asset from cdn.halifax.ca",
        "urgency": "medium",
        "pageCount": 7,
        "totalEstimatedSavingsBytes": 1721933,
        "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles."
      },
      {
        "title": "Modularize heavy script asset from www.gstatic.com",
        "urgency": "high",
        "pageCount": 6,
        "totalEstimatedSavingsBytes": 1340994,
        "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles."
      }
    ],
    "recurringOrigins": [
      {
        "domain": "www.googletagmanager.com",
        "pageCount": 100,
        "totalTransferBytes": 61750686
      },
      {
        "domain": "cdn.halifax.ca",
        "pageCount": 44,
        "totalTransferBytes": 23836095
      },
      {
        "domain": "www.halifax.ca",
        "pageCount": 18,
        "totalTransferBytes": 4459590
      },
      {
        "domain": "www.youtube.com",
        "pageCount": 9,
        "totalTransferBytes": 13070338
      },
      {
        "domain": "www.gstatic.com",
        "pageCount": 6,
        "totalTransferBytes": 1961989
      },
      {
        "domain": "apis.google.com",
        "pageCount": 5,
        "totalTransferBytes": 552201
      },
      {
        "domain": "api.recollect.net",
        "pageCount": 3,
        "totalTransferBytes": 2056783
      },
      {
        "domain": "cdn.pendo.io",
        "pageCount": 3,
        "totalTransferBytes": 565782
      }
    ],
    "designSystemGuidance": [
      "This same heavy image pattern appears on 19 pages. Fix it once in the shared template, CMS block, or design system component to reduce load across the whole site.",
      "These 3 script bundles are recurring modularization targets. Move the fix to the shared bundle or component boundary so every affected page gets lighter at once.",
      "These 3 modularization targets recur across multiple pages. Centralize the fix at the component or bundle level instead of treating each page separately.",
      "Heavy assets from www.googletagmanager.com recur across 100 pages. Review whether that dependency should be deferred, optimized, or loaded conditionally."
    ]
  },
  "results": [
    {
      "url": "https://www.halifax.ca/",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/",
      "performanceScore": 0.57,
      "bestPracticesScore": 0.79,
      "transferBytes": 2817441,
      "co2Grams": 1.0793092426974,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622686,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 355281,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 174522,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 21411,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11063,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2222,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972206859&cv=11&fst=1776972206859&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938469~117266400~117884344~118128923~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2F&rcb=4&frm=0&tiba=Halifax%20Regional%20Municipality%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 0,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Halifax Regional Municipality | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The official site of the municipal government for Halifax Regional Municipality. Information for residents and businesses in Halifax.",
          "robots": "",
          "canonical": "https://www.halifax.ca/node/4561",
          "ogTitle": "Home",
          "ogDescription": "The official site of the municipal government for Halifax Regional Municipality. Information for residents and businesses in Halifax.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/node/4561",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 36,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 78,
          "tabletSmallTapTargets": 82,
          "fixedWidthOffenders": 3,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 3,
            "smallTapTargets": 78,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 82,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 78 small targets on mobile and 82 on tablet."
          },
          {
            "title": "Refactor fixed-width components",
            "urgency": "medium",
            "detail": "3 element(s) exceeded viewport width in tested layouts; use responsive component constraints."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:23:43 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 46,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 16,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 15
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "15 of 16 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 16,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/16 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 46,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 1310095.75,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 836816.7500000001,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "estimatedSavingsBytes": 377259,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 66686,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 817.20 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 368.42 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 65.12 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1916261.75,
        "totalEstimatedBlockingMs": 2443,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 836816.7500000001,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 817 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 377259,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 368 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 299785,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 293 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 268211,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 262 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2443,
            "displayValue": "Est savings of 2,440 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 66686,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 65 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 38170,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 37 KiB",
            "urgency": "low",
            "sourceAuditId": "offscreen-images"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 817.20 KB."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "high",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 368.42 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 292.76 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 261.92 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 2443 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 65.12 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 2113178.3916666657
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 2.02 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 2.02 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 11,
        "urgency": "high",
        "transferBytes": 2817441,
        "css": {
          "unusedBytes": 299785,
          "ratio": 0.10640329291722524,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 268211,
          "duplicatedBytes": 0,
          "ratio": 0.0951966696019544,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 299785,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 268211,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 20,
        "urgency": "high",
        "transferBytes": 2817441,
        "estimatedDeferrableBytes": 606166,
        "renderBlockingMs": 2443,
        "breakdown": {
          "offscreenImageSavings": 38170,
          "unusedJavascriptSavings": 268211,
          "unusedCssSavings": 299785
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 38170,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 268211,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 299785,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2443,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 1299937,
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/home/2026/2026-27-municipal-budget_homepage_cover-photo-1.jpg?itok=hmpqZ3ln",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163495,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163409,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 831904,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622686,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 174522,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 21411,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11063,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2222,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972206859&cv=11&fst=1776972206859&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938469~117266400~117884344~118128923~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2F&rcb=4&frm=0&tiba=Halifax%20Regional%20Municipality%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 29,
        "urgency": "high",
        "transferBytes": 2817441,
        "estimatedRedundantBytes": 567996,
        "redundancyRatio": 0.20159996251917964,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 299785,
            "displayValue": "Est savings of 293 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 268211,
            "displayValue": "Est savings of 262 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 299785,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 268211,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 38,
        "urgency": "high",
        "totalTransferBytes": 2817441,
        "heavyRequestCount": 6,
        "heavyBytes": 2086118,
        "heavyRatio": 0.7404300569204466,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/home/2026/2026-27-municipal-budget_homepage_cover-photo-1.jpg?itok=hmpqZ3ln",
            "transferSize": 1299937,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163495,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163409,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162344,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160468,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136465,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 1299937
          },
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622686
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163495
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "cdn.halifax.ca",
            "count": 2,
            "transferBytes": 1463432
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622686
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 38170,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 268211,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 1299937,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/home/2026/2026-27-municipal-budget_homepage_cover-photo-1.jpg?itok=hmpqZ3ln",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163495,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163409,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "11.3 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 11.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 293 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 293 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 817 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 817 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 368 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 368 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 37 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 37 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 2,440 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 2,440 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.76,
          "displayValue": "4.3 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 262 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 262 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 2,751 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 2,751 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,304 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,304 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/node/4561",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/",
      "performanceScore": 0.49,
      "bestPracticesScore": 0.79,
      "transferBytes": 2813134,
      "co2Grams": 1.0776593111076003,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622112,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 353841,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173517,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11059,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2184,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972232637&cv=11&fst=1776972232637&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400~117884344&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2F&rcb=15&frm=0&tiba=Halifax%20Regional%20Municipality%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Halifax Regional Municipality | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The official site of the municipal government for Halifax Regional Municipality. Information for residents and businesses in Halifax.",
          "robots": "",
          "canonical": "https://www.halifax.ca/node/4561",
          "ogTitle": "Home",
          "ogDescription": "The official site of the municipal government for Halifax Regional Municipality. Information for residents and businesses in Halifax.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/node/4561",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 36,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 78,
          "tabletSmallTapTargets": 82,
          "fixedWidthOffenders": 3,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 3,
            "smallTapTargets": 78,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 82,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 78 small targets on mobile and 82 on tablet."
          },
          {
            "title": "Refactor fixed-width components",
            "urgency": "medium",
            "detail": "3 element(s) exceeded viewport width in tested layouts; use responsive component constraints."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:24:07 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 46,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 16,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 15
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "15 of 16 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 16,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/16 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 47,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 1309299.75,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 836432.7500000001,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "estimatedSavingsBytes": 376902,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 66631,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 816.83 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 368.07 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 65.07 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1922033.75,
        "totalEstimatedBlockingMs": 1933,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 836432.7500000001,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 817 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 376902,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 368 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 299733,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 293 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270889,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1933,
            "displayValue": "Est savings of 1,930 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 66631,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 65 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 816.83 KB."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "high",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 368.07 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 292.71 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.54 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1933 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 65.07 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 2109652.8500000006
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 2.01 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 2.01 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 11,
        "urgency": "high",
        "transferBytes": 2813134,
        "css": {
          "unusedBytes": 299733,
          "ratio": 0.1065477151106204,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270889,
          "duplicatedBytes": 0,
          "ratio": 0.09629438199531198,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 299733,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270889,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 2813134,
        "estimatedDeferrableBytes": 612734,
        "renderBlockingMs": 1933,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270889,
          "unusedCssSavings": 299733
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270889,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 299733,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1933,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 1299711,
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/home/2026/2026-27-municipal-budget_homepage_cover-photo-1.jpg?itok=hmpqZ3ln",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163014,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 829701,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622112,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173517,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11059,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2184,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972232637&cv=11&fst=1776972232637&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400~117884344&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2F&rcb=15&frm=0&tiba=Halifax%20Regional%20Municipality%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 31,
        "urgency": "high",
        "transferBytes": 2813134,
        "estimatedRedundantBytes": 570622,
        "redundancyRatio": 0.2028420971059324,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 299733,
            "displayValue": "Est savings of 293 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270889,
            "displayValue": "Est savings of 265 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 299733,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270889,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 38,
        "urgency": "high",
        "totalTransferBytes": 2813134,
        "heavyRequestCount": 6,
        "heavyBytes": 2085263,
        "heavyRatio": 0.7412597480248008,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/home/2026/2026-27-municipal-budget_homepage_cover-photo-1.jpg?itok=hmpqZ3ln",
            "transferSize": 1299711,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163014,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162255,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160378,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136465,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 1299711
          },
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622112
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "cdn.halifax.ca",
            "count": 2,
            "transferBytes": 1463151
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622112
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270889,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 1299711,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/home/2026/2026-27-municipal-budget_homepage_cover-photo-1.jpg?itok=hmpqZ3ln",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163014,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "13.2 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 13.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 265 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 293 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 293 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 817 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 817 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 368 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 368 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,930 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,930 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.69,
          "displayValue": "4.7 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.7 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 2,747 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 2,747 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,304 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,304 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/diversity-inclusion/accessibility",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/diversity-inclusion/accessibility",
      "performanceScore": 0.47,
      "bestPracticesScore": 0.75,
      "transferBytes": 1545689,
      "co2Grams": 0.5921247060846001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622111,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 73,
            "transferBytes": 353406,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174972,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11059,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2199,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972255240&cv=11&fst=1776972255240&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401~117384405~118487543&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fdiversity-inclusion%2Faccessibility&rcb=18&frm=0&tiba=Accessibility%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Accessibility | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax Regional Municipality continues to work to make our facilities and services more accessible. This site offers links to information on programs and information for residents and visitors requiring accessible services.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/diversity-inclusion/accessibility",
          "ogTitle": "Accessibility",
          "ogDescription": "Halifax Regional Municipality continues to work to make our facilities and services more accessible. This site offers links to information on programs and information for residents and visitors requiring accessible services.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/diversity-inclusion/accessibility",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 75,
          "tabletSmallTapTargets": 88,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 75,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 88,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 75 small targets on mobile and 88 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:24:30 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 46,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 15,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 14
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "14 of 15 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 15,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/15 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 21,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 318481.2,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 155752.2,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 66950,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 66445,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 152.10 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 65.38 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 64.89 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 932215.2,
        "totalEstimatedBlockingMs": 1777,
        "opportunities": [
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 300780,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 294 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270842,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1777,
            "displayValue": "Est savings of 1,780 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 155752.2,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 152 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 66950,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 65 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 66445,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 65 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 293.73 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.49 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1777 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 152.10 KB."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 65.38 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 64.89 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 859333.7333333336
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 839.19 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 839.19 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1545689,
        "css": {
          "unusedBytes": 300780,
          "ratio": 0.19459283206388867,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270842,
          "duplicatedBytes": 0,
          "ratio": 0.1752241233521103,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 300780,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270842,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 25,
        "urgency": "high",
        "transferBytes": 1545689,
        "estimatedDeferrableBytes": 613734,
        "renderBlockingMs": 1777,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270842,
          "unusedCssSavings": 300780
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270842,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 300780,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1777,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162981,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 831170,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622111,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174972,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11059,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2199,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972255240&cv=11&fst=1776972255240&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401~117384405~118487543&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fdiversity-inclusion%2Faccessibility&rcb=18&frm=0&tiba=Accessibility%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 40,
        "urgency": "high",
        "transferBytes": 1545689,
        "estimatedRedundantBytes": 571622,
        "redundancyRatio": 0.36981695541599896,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 300780,
            "displayValue": "Est savings of 294 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270842,
            "displayValue": "Est savings of 264 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 300780,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270842,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 29,
        "urgency": "medium",
        "totalTransferBytes": 1545689,
        "heavyRequestCount": 5,
        "heavyBytes": 785551,
        "heavyRatio": 0.508220605826916,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162981,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
            "transferSize": 162250,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
            "transferSize": 160372,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
            "transferSize": 136508,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622111
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622111
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270842,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162981,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.06,
          "displayValue": "7.0 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 7.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 294 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 294 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 152 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 152 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 65 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 65 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,780 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,780 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 960 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 960 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.61,
          "displayValue": "5.1 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,493 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,493 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home/311",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home/311",
      "performanceScore": 0.47,
      "bestPracticesScore": 0.79,
      "transferBytes": 2211293,
      "co2Grams": 0.8471052182502,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622691,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 340310,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 174345,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11059,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2196,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972277239&cv=11&fst=1776972277239&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401~117884344&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome%2F311&rcb=10&frm=0&tiba=311%20%7C%20Municipal%20Services%20and%20Information%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "311 | Municipal Services and Information | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "More than a telephone number, 311 is your direct connection to important municipal services and information. Our 311 Customer Contact Centres include a call centre, five customer service centres, and online service requests. Whether you prefer to phone-in, walk-in, or connect with us on-line, we can help!",
          "robots": "",
          "canonical": "https://www.halifax.ca/home/311",
          "ogTitle": "311 Municipal Services and Information",
          "ogDescription": "More than a telephone number, 311 is your direct connection to important municipal services and information. Our 311 Customer Contact Centres include a call centre, five customer service centres, and online service requests. Whether you prefer to phone-in, walk-in, or connect with us on-line, we can help!",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home/311",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 81,
          "tabletSmallTapTargets": 84,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 81,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 84,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 81 small targets on mobile and 84 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:24:52 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 28,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 28
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "28 of 28 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 28,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/28 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 31,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 689157.25,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 473486.25,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 122779,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 63558,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 462.39 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 119.90 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 62.07 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1492416.25,
        "totalEstimatedBlockingMs": 2306,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 473486.25,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 462 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 288162,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 281 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270487,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 202394,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 198 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2306,
            "displayValue": "Est savings of 2,310 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 122779,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 120 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 63558,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 62 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42216,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 462.39 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 281.41 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.15 KB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "high",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 197.65 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 2306 ms."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 119.90 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1518127.650000002
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.45 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.45 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 13,
        "urgency": "high",
        "transferBytes": 2211293,
        "css": {
          "unusedBytes": 288162,
          "ratio": 0.13031380282938534,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270487,
          "duplicatedBytes": 0,
          "ratio": 0.12232074175606761,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 288162,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270487,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 22,
        "urgency": "high",
        "transferBytes": 2211293,
        "estimatedDeferrableBytes": 600865,
        "renderBlockingMs": 2306,
        "breakdown": {
          "offscreenImageSavings": 42216,
          "unusedJavascriptSavings": 270487,
          "unusedCssSavings": 288162
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42216,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270487,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 288162,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2306,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 180312,
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-11/0_multilingual_0.jpg",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163374,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 831120,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622691,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 174345,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11059,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2196,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972277239&cv=11&fst=1776972277239&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401~117884344&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome%2F311&rcb=10&frm=0&tiba=311%20%7C%20Municipal%20Services%20and%20Information%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 31,
        "urgency": "high",
        "transferBytes": 2211293,
        "estimatedRedundantBytes": 558649,
        "redundancyRatio": 0.2526345445854529,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 288162,
            "displayValue": "Est savings of 281 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270487,
            "displayValue": "Est savings of 264 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 288162,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270487,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 26,
        "urgency": "medium",
        "totalTransferBytes": 2211293,
        "heavyRequestCount": 6,
        "heavyBytes": 966443,
        "heavyRatio": 0.4370488216622582,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-11/0_multilingual_0.jpg",
            "transferSize": 180312,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163374,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
            "transferSize": 162340,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
            "transferSize": 160464,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
            "transferSize": 136513,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622691
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 180312
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622691
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 2,
            "transferBytes": 343752
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42216,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270487,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 180312,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-11/0_multilingual_0.jpg",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163374,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.03,
          "displayValue": "7.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 7.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 281 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 281 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 462 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 462 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 120 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 120 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 2,310 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 2,310 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-rel-preconnect",
          "title": "Preconnect to required origins",
          "description": "Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).",
          "score": 0,
          "displayValue": "Est savings of 300 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Preconnect to required origins\n\n- Lighthouse audit: uses-rel-preconnect\n- Current value: Est savings of 300 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nConsider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.68,
          "displayValue": "4.7 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.7 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,500 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,500 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home/online-services",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home/online-services",
      "performanceScore": 0.69,
      "bestPracticesScore": 0.79,
      "transferBytes": 1150930,
      "co2Grams": 0.4408998757020002,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622068,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 52,
            "transferBytes": 170260,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 138588,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11059,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2171,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972299645&cv=11&fst=1776972299645&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome%2Fonline-services&rcb=19&frm=0&tiba=Online%20Services%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 2,
        "uniqueElementsAssessed": 2,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "form|get|/home/online-services|input|text|ols|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "ols",
            "formContext": "form|get|/home/online-services",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "2 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "2 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Online Services | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "View and select an online service.",
          "robots": "",
          "canonical": "https://www.halifax.ca/home/online-services",
          "ogTitle": "Online Services",
          "ogDescription": "View and select an online service.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home/online-services",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 143,
          "tabletSmallTapTargets": 173,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 143,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 173,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 143 small targets on mobile and 173 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 57,
          "externalScriptsWithoutIntegrity": 57,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:25:12 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "57 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 9,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 103992.04999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 27348,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 20944,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30326.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 26.71 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 20.45 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 508725.05,
        "totalEstimatedBlockingMs": 1646,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270056,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1646,
            "displayValue": "Est savings of 1,650 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 92565,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 90 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 27348,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 27 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 20944,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 20 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30326.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.73 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1646 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 90.40 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 26.71 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 20.45 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 57,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "57 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 448972.1500000001
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 438.45 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 438.45 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1150930,
        "css": {
          "unusedBytes": 92565,
          "ratio": 0.08042626397782662,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270056,
          "duplicatedBytes": 0,
          "ratio": 0.23464155074591853,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 92565,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270056,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 25,
        "urgency": "high",
        "transferBytes": 1150930,
        "estimatedDeferrableBytes": 404733,
        "renderBlockingMs": 1646,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270056,
          "unusedCssSavings": 92565
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270056,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 92565,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1646,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163006,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 60,
        "transferBytes": 826387,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622068,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 52,
            "transferBytes": 170260,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11059,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2171,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972299645&cv=11&fst=1776972299645&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome%2Fonline-services&rcb=19&frm=0&tiba=Online%20Services%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 35,
        "urgency": "medium",
        "transferBytes": 1150930,
        "estimatedRedundantBytes": 362621,
        "redundancyRatio": 0.3150678147237451,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270056,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 92565,
            "displayValue": "Est savings of 90 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270056,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 92565,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 31,
        "urgency": "medium",
        "totalTransferBytes": 1150930,
        "heavyRequestCount": 4,
        "heavyBytes": 622068,
        "heavyRatio": 0.5404916024432416,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163006,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162219,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160378,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136465,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622068
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622068
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270056,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163006,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 90 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 90 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,650 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,650 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.52,
          "displayValue": "3.9 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 3.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.89,
          "displayValue": "3.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "2,652 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 2,652 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/fr",
      "status": "ok",
      "finalUrl": "https://fr.halifax.ca/",
      "performanceScore": 0.67,
      "bestPracticesScore": 0.93,
      "transferBytes": 582927,
      "co2Grams": 0.22330849125780003,
      "greenWeb": {
        "page": {
          "hostname": "fr.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:25:26.740469",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/fr.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 163014,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11059,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 2,
          "greenCount": 2,
          "notGreenCount": 1,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 0,
        "urgency": "low",
        "pageElementOccurrences": 0,
        "uniqueElementsAssessed": 0,
        "reusedFromCacheCount": 0,
        "components": [],
        "recommendations": [
          {
            "title": "No major form validation risks detected",
            "urgency": "low",
            "detail": "Continue testing form flows to ensure error handling remains clear across templates."
          }
        ]
      },
      "metadata": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": false,
          "hasCanonical": true,
          "hasOpenGraphCore": false,
          "hasTwitterCard": false,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Page D'accueil | Halifax",
          "lang": "fr-CA",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "",
          "robots": "",
          "canonical": "https://fr.halifax.ca/",
          "ogTitle": "",
          "ogDescription": "",
          "ogType": "",
          "ogUrl": "",
          "twitterCard": "",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Add meta description",
            "urgency": "medium",
            "detail": "Provide a concise description to improve machine interpretation and preview quality."
          },
          {
            "title": "Complete Open Graph metadata",
            "urgency": "medium",
            "detail": "Include og:title, og:description, og:type, and og:url for robust machine-readable sharing metadata."
          },
          {
            "title": "Add twitter:card metadata",
            "urgency": "low",
            "detail": "Include twitter card metadata to improve cross-platform machine-readable previews."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 17,
          "tabletSmallTapTargets": 17,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 17,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 17,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "medium",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 17 small targets on mobile and 17 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 51,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 1,
          "externalScriptsWithoutIntegrity": 1,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "max-age=3600, public",
            "content-encoding": "gzip",
            "content-language": "fr-CA",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:25:18 GMT",
            "etag": "\"1773882089-gzip\"",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "last-modified": "Thu, 19 Mar 2026 01:01:29 GMT",
            "server": "Apache",
            "vary": "Cookie,Accept-Encoding",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "HIT",
            "x-drupal-dynamic-cache": "MISS",
            "x-frame-options": "SAMEORIGIN",
            "x-generator": "Drupal 10 (https://www.drupal.org)"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "1 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 60,
        "urgency": "high",
        "origin": "https://fr.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://fr.halifax.ca/robots.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://fr.halifax.ca/sitemap.xml",
            "found": true,
            "status": 200,
            "contentType": "application/xml; charset=utf-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://fr.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://fr.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://fr.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add missing expected site files",
            "urgency": "high",
            "detail": "Missing expected file(s): /robots.txt."
          },
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 5,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 5
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "5 of 5 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 80,
        "urgency": "medium",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": true,
          "media": {
            "totalImages": 5,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 1,
            "scripts": [
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/5 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 1 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 8,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 49313.55,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 49313.55,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 48.16 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 252530.55,
        "totalEstimatedBlockingMs": 171,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 156688,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 153 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 43602,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 43 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 49313.55,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 48 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 2927,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 3 KiB",
            "urgency": "low",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 171,
            "displayValue": "Est savings of 170 ms",
            "urgency": "low",
            "sourceAuditId": "render-blocking-resources"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "medium",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 153.02 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 42.58 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "low",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 48.16 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "low",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 2.86 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "low",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 171 ms."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 2,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 1,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "1 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 387396
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 378.32 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 378.32 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 15,
        "urgency": "medium",
        "transferBytes": 582927,
        "css": {
          "unusedBytes": 43602,
          "ratio": 0.0747983881343633,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 156688,
          "duplicatedBytes": 0,
          "ratio": 0.2687952350808935,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "medium",
            "estimatedSavingsBytes": 43602,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 156688,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 11,
        "urgency": "medium",
        "transferBytes": 582927,
        "estimatedDeferrableBytes": 203217,
        "renderBlockingMs": 171,
        "breakdown": {
          "offscreenImageSavings": 2927,
          "unusedJavascriptSavings": 156688,
          "unusedCssSavings": 43602
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 2927,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 156688,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 43602,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 171,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from fr.halifax.ca",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 163204,
            "url": "https://fr.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/2023-08/Lake%20Banook_Halifax%20Banner.jpg?itok=wTLnmfRG",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163014,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from fr.halifax.ca",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 89413,
            "url": "https://fr.halifax.ca/sites/default/files/js/js_WcXonBfoelr9z3McMl2OSqhfk6-l6C0gRcv2bFDiTeA.js?scope=footer&delta=0&language=fr-CA&theme=halifax&include=eJxdzEEOgCAMRNELiRzJDKi1WqmBxsDtdWFMdDPJf4sJqlYs4xgCcmb1JBogrlgTTtSRKsk0GMjTPf_usaJ-ce8WCM-oPm4OMWoeWdOLz_9aXinGcWsu4bwAL-c2Jg",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 26,
        "urgency": "low",
        "providerCount": 2,
        "requestCount": 3,
        "transferBytes": 174073,
        "notGreenCount": 0,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 163014,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11059,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "low",
            "detail": "Track 2 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "medium",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          }
        ]
      },
      "redundancy": {
        "score": 19,
        "urgency": "medium",
        "transferBytes": 582927,
        "estimatedRedundantBytes": 200290,
        "redundancyRatio": 0.34359362321525677,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 156688,
            "displayValue": "Est savings of 153 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 43602,
            "displayValue": "Est savings of 43 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 156688,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 43602,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 41,
        "urgency": "medium",
        "totalTransferBytes": 582927,
        "heavyRequestCount": 4,
        "heavyBytes": 462687,
        "heavyRatio": 0.793730604346685,
        "heavyRequests": [
          {
            "url": "https://fr.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/2023-08/Lake%20Banook_Halifax%20Banner.jpg?itok=wTLnmfRG",
            "transferSize": 163204,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "fr.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163014,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://fr.halifax.ca/sites/default/files/js/js_WcXonBfoelr9z3McMl2OSqhfk6-l6C0gRcv2bFDiTeA.js?scope=footer&delta=0&language=fr-CA&theme=halifax&include=eJxdzEEOgCAMRNELiRzJDKi1WqmBxsDtdWFMdDPJf4sJqlYs4xgCcmb1JBogrlgTTtSRKsk0GMjTPf_usaJ-ce8WCM-oPm4OMWoeWdOLz_9aXinGcWsu4bwAL-c2Jg",
            "transferSize": 89413,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "fr.halifax.ca"
          },
          {
            "url": "https://fr.halifax.ca/sites/default/files/css/css_IGX0G8TEX2UU0xWziRPYH26A1syxbKbsD9-fhR3uy6A.css?delta=3&language=fr-CA&theme=halifax&include=eJxdz2EOwiAMBeALrduRTIEO0EIJhai3F3Vu6h-Sfu-FtEakaatYTgZrjbJ4FoMM2u4cs5-sVFqspCKZctPZ_PUBEuV-ssI9ZX3XXe0FecYz3qaAHFe8LfYCaEfqouQdHWmLGdsw2GzPVmGWK3TdZdvM6kGBqkAgdIdIIijoCVpkOposXvbhla_jEqq_9vzqy5Tj2Hu8TyxY0Y_Dg34OPGTuuXTDUQO5Se_aKC0GlR7Ly4at",
            "transferSize": 47056,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "fr.halifax.ca"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 2,
            "transferBytes": 252427
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 163204
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 47056
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "fr.halifax.ca",
            "count": 3,
            "transferBytes": 299673
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 1,
            "transferBytes": 163014
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 156688,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from fr.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163204,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://fr.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/2023-08/Lake%20Banook_Halifax%20Banner.jpg?itok=wTLnmfRG",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163014,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from fr.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 89413,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://fr.halifax.ca/sites/default/files/js/js_WcXonBfoelr9z3McMl2OSqhfk6-l6C0gRcv2bFDiTeA.js?scope=footer&delta=0&language=fr-CA&theme=halifax&include=eJxdzEEOgCAMRNELiRzJDKi1WqmBxsDtdWFMdDPJf4sJqlYs4xgCcmb1JBogrlgTTtSRKsk0GMjTPf_usaJ-ce8WCM-oPm4OMWoeWdOLz_9aXinGcWsu4bwAL-c2Jg",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.04,
          "displayValue": "7.3 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 7.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 153 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 153 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 43 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 43 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 48 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 48 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 170 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 170 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.84,
          "displayValue": "3.8 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 3 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 3 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax",
      "performanceScore": 0.43,
      "bestPracticesScore": 0.79,
      "transferBytes": 1755105,
      "co2Grams": 0.672348080547,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622071,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156760,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 69,
            "transferBytes": 149647,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11069,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2174,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972334260&cv=11&fst=1776972334260&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266400~117884344~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax&rcb=1&frm=0&tiba=About%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "About Halifax | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Information about the Halifax Regional Municipality such as, regional planning, employment, information for newcomers, and more.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax",
          "ogTitle": "About Halifax",
          "ogDescription": "Information about the Halifax Regional Municipality such as, regional planning, employment, information for newcomers, and more.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 72,
          "tabletSmallTapTargets": 73,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 72,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 73,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 72 small targets on mobile and 73 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:25:46 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 15,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 15
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "15 of 15 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 15,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/15 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 34,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 604079.6000000001,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 400464.60000000003,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 154974,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 23750,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 391.08 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 151.34 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 23.19 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 978216.6000000001,
        "totalEstimatedBlockingMs": 1527,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 400464.60000000003,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 391 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269645,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 263 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1527,
            "displayValue": "Est savings of 1,530 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 154974,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 151 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 104492,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 102 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 23750,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 23 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 391.08 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.33 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1527 ms."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 151.34 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 102.04 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1070572.6166666665
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.02 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.02 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 11,
        "urgency": "high",
        "transferBytes": 1755105,
        "css": {
          "unusedBytes": 104492,
          "ratio": 0.059536039154352585,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269645,
          "duplicatedBytes": 0,
          "ratio": 0.15363468282524406,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 104492,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269645,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 1755105,
        "estimatedDeferrableBytes": 374137,
        "renderBlockingMs": 1527,
        "breakdown": {
          "offscreenImageSavings": 0,
          "unusedJavascriptSavings": 269645,
          "unusedCssSavings": 104492
        },
        "candidates": [
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269645,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 104492,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1527,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 456742,
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/about.jpg?itok=jqPtq74e",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163014,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 812903,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622071,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156760,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11069,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2174,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972334260&cv=11&fst=1776972334260&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266400~117884344~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax&rcb=1&frm=0&tiba=About%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 32,
        "urgency": "medium",
        "transferBytes": 1755105,
        "estimatedRedundantBytes": 374137,
        "redundancyRatio": 0.21317072197959666,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269645,
            "displayValue": "Est savings of 263 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 104492,
            "displayValue": "Est savings of 102 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269645,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 104492,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 33,
        "urgency": "high",
        "totalTransferBytes": 1755105,
        "heavyRequestCount": 5,
        "heavyBytes": 1078813,
        "heavyRatio": 0.6146714868910976,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/about.jpg?itok=jqPtq74e",
            "transferSize": 456742,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163014,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162255,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160340,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136462,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622071
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 456742
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622071
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 456742
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269645,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 456742,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/about.jpg?itok=jqPtq74e",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163014,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "13.2 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 13.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 263 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 263 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 102 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 102 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 391 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 391 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 151 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 151 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,530 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,530 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,350 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,350 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.51,
          "displayValue": "5.7 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.7 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,307 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,307 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/diversity-inclusion",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/diversity-inclusion",
      "performanceScore": 0.3,
      "bestPracticesScore": 0.75,
      "transferBytes": 1326424,
      "co2Grams": 0.5081283629136001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622109,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 176131,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156246,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11077,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2214,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972354359&cv=11&fst=1776972354359&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401~117625642~117884344~118487544&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fdiversity-inclusion&rcb=9&frm=0&tiba=Diversity%20%26%20Inclusion%20%7C%20Community%20%7C%20Values%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Diversity & Inclusion | Community | Values | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The Halifax Regional Municipality values diversity and inclusion in all that we do, think, and pursue. We recognize diversity and inclusion as core values. Thus, laying the foundation to represent the communities we serve.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/diversity-inclusion",
          "ogTitle": "Diversity & Inclusion",
          "ogDescription": "The Halifax Regional Municipality values diversity and inclusion in all that we do, think, and pursue. We recognize diversity and inclusion as core values. Thus, laying the foundation to represent the communities we serve.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/diversity-inclusion",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 77,
          "tabletSmallTapTargets": 85,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 77,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 85,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 77 small targets on mobile and 85 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:26:08 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 24,
        "urgency": "low",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 14,
          "imagesWithLazy": 6,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 14 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 14,
            "lazyImages": 6,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 6/14 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 18,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 233009,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 131413,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 47197,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29508,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 128.33 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 46.09 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.82 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 676065,
        "totalEstimatedBlockingMs": 1733,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270759,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 130146,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 127 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1733,
            "displayValue": "Est savings of 1,730 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 131413,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 128 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42151,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 29508,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 47197,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 46 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.41 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 127.10 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1733 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 128.33 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.16 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 28.82 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 642290.6249999999
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 627.24 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 627.24 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 15,
        "urgency": "high",
        "transferBytes": 1326424,
        "css": {
          "unusedBytes": 130146,
          "ratio": 0.09811794720240286,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270759,
          "duplicatedBytes": 0,
          "ratio": 0.20412703630211756,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 130146,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270759,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 24,
        "urgency": "high",
        "transferBytes": 1326424,
        "estimatedDeferrableBytes": 443056,
        "renderBlockingMs": 1733,
        "breakdown": {
          "offscreenImageSavings": 42151,
          "unusedJavascriptSavings": 270759,
          "unusedCssSavings": 130146
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42151,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270759,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 130146,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1733,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163014,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 812475,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622109,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156246,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11077,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2214,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972354359&cv=11&fst=1776972354359&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401~117625642~117884344~118487544&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fdiversity-inclusion&rcb=9&frm=0&tiba=Diversity%20%26%20Inclusion%20%7C%20Community%20%7C%20Values%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 37,
        "urgency": "medium",
        "transferBytes": 1326424,
        "estimatedRedundantBytes": 400905,
        "redundancyRatio": 0.30224498350452045,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270759,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 130146,
            "displayValue": "Est savings of 127 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270759,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 130146,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 27,
        "urgency": "medium",
        "totalTransferBytes": 1326424,
        "heavyRequestCount": 4,
        "heavyBytes": 622109,
        "heavyRatio": 0.46901217107048726,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163014,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162216,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160370,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136509,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622109
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622109
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42151,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270759,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163014,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "11.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 11.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 127 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 127 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 128 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 128 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,730 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,730 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 700 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 700 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.58,
          "displayValue": "5.3 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 46 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 46 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,440 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,440 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/employment",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/employment",
      "performanceScore": 0.64,
      "bestPracticesScore": 0.79,
      "transferBytes": 1161952,
      "co2Grams": 0.4451221988928,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622089,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 162606,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156091,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11087,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2198,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972376951&cv=11&fst=1776972376951&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400~117625641~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Femployment&rcb=13&frm=0&tiba=Employment%20%7C%20About%20Halifax%20%7C%20Jobs%20%7C%20Interviews%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Employment | About Halifax | Jobs | Interviews | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Interested in working for Halifax Regional Municipality? Read about all of the different opportunities available on right now; along with lots of helpful information when preparing for your interview.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/employment",
          "ogTitle": "Employment",
          "ogDescription": "Interested in working for Halifax Regional Municipality? Read about all of the different opportunities available on right now; along with lots of helpful information when preparing for your interview.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/employment",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 68,
          "tabletSmallTapTargets": 76,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 68,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 68 small targets on mobile and 76 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:26:28 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 43,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 9,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 9 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 9,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/9 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 133132.45,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26608,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 50879.450000000004,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 30754,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.98 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 49.69 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 30.03 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 563571.45,
        "totalEstimatedBlockingMs": 1035,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270790,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1035,
            "displayValue": "Est savings of 1,040 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 117537,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 115 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26608,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 50879.450000000004,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 50 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 30754,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.44 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1035 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 114.78 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 25.98 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 481376.84166666685
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 470.09 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 470.09 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1161952,
        "css": {
          "unusedBytes": 117537,
          "ratio": 0.10115478092038226,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270790,
          "duplicatedBytes": 0,
          "ratio": 0.23304749249538706,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 117537,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270790,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 1161952,
        "estimatedDeferrableBytes": 430439,
        "renderBlockingMs": 1035,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270790,
          "unusedCssSavings": 117537
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270790,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 117537,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1035,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162985,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 812294,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622089,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156091,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11087,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2198,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972376951&cv=11&fst=1776972376951&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400~117625641~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Femployment&rcb=13&frm=0&tiba=Employment%20%7C%20About%20Halifax%20%7C%20Jobs%20%7C%20Interviews%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 36,
        "urgency": "medium",
        "transferBytes": 1161952,
        "estimatedRedundantBytes": 388327,
        "redundancyRatio": 0.3342022734157693,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270790,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 117537,
            "displayValue": "Est savings of 115 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270790,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 117537,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 31,
        "urgency": "medium",
        "totalTransferBytes": 1161952,
        "heavyRequestCount": 4,
        "heavyBytes": 622089,
        "heavyRatio": 0.5353827008344578,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162985,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162255,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160340,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136509,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622089
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622089
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270790,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162985,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 115 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 115 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,040 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,040 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.52,
          "displayValue": "3.9 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 3.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 50 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 50 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,266 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,266 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/environment-climate-change",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/environment-climate-change",
      "performanceScore": 0.57,
      "bestPracticesScore": 0.79,
      "transferBytes": 1201649,
      "co2Grams": 0.4603293812286,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622038,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 162623,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156114,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11088,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2203,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972396814&cv=11&fst=1776972396814&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938469~117266400~117384406&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fenvironment-climate-change&rcb=18&frm=0&tiba=Environment%20%26%20Climate%20Change%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Environment & Climate Change | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Environment & Climate Change",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/environment-climate-change",
          "ogTitle": "Environment & Climate Change",
          "ogDescription": "Environment & Climate Change",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/environment-climate-change",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 68,
          "tabletSmallTapTargets": 80,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 68,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 80,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 68 small targets on mobile and 80 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:26:50 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 38,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 10,
          "imagesWithLazy": 2,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 10 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 10,
            "lazyImages": 2,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 2/10 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 14,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 170735.05,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 83805.05,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26609,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 35430,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 81.84 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.99 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 34.60 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 601115.05,
        "totalEstimatedBlockingMs": 1329,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270731,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1329,
            "displayValue": "Est savings of 1,330 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 117537,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 115 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 83805.05,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 82 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26609,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 35430,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 35 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.39 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1329 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 114.78 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 81.84 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 25.99 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 518779.5333333335
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 506.62 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 506.62 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1201649,
        "css": {
          "unusedBytes": 117537,
          "ratio": 0.09781308851420006,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270731,
          "duplicatedBytes": 0,
          "ratio": 0.22529956751097865,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 117537,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270731,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 23,
        "urgency": "high",
        "transferBytes": 1201649,
        "estimatedDeferrableBytes": 430380,
        "renderBlockingMs": 1329,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270731,
          "unusedCssSavings": 117537
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270731,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 117537,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1329,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163014,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 812272,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622038,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156114,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11088,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2203,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972396814&cv=11&fst=1776972396814&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938469~117266400~117384406&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fenvironment-climate-change&rcb=18&frm=0&tiba=Environment%20%26%20Climate%20Change%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 35,
        "urgency": "medium",
        "transferBytes": 1201649,
        "estimatedRedundantBytes": 388268,
        "redundancyRatio": 0.32311265602517875,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270731,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 117537,
            "displayValue": "Est savings of 115 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270731,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 117537,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1201649,
        "heavyRequestCount": 4,
        "heavyBytes": 622038,
        "heavyRatio": 0.5176536575988496,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163014,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162219,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160340,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136465,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622038
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622038
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270731,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163014,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.49,
          "displayValue": "4.0 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 115 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 115 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,330 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,330 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,010 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,010 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.63,
          "displayValue": "5.0 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 82 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 82 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 35 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 35 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,442 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,442 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/municipal-archives",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/municipal-archives",
      "performanceScore": 0.39,
      "bestPracticesScore": 0.79,
      "transferBytes": 1802311,
      "co2Grams": 0.6904318211153999,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622083,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 76,
            "transferBytes": 229731,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "static.xx.fbcdn.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 204470,
            "sampleUrl": "https://static.xx.fbcdn.net/rsrc.php/v4ixcg4/yl/l/en_US-j/7PiJ-6XVtiI.js",
            "greenCheck": {
              "hostname": "static.xx.fbcdn.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-22T21:10:08.176146",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.xx.fbcdn.net",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156246,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11088,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2189,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972417075&cv=11&fst=1776972417075&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fmunicipal-archives&rcb=14&frm=0&tiba=Municipal%20Archives%20%7C%20Halifax%20History%20%7C%20Search%20Archives%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 7,
          "greenCount": 4,
          "notGreenCount": 4,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Municipal Archives | Halifax History | Search Archives | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax Municipal Archives. Information about our location and hours, services, guides to records, virtual exhibits, and access to online database.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/municipal-archives",
          "ogTitle": "Municipal Archives",
          "ogDescription": "Halifax Municipal Archives. Information about our location and hours, services, guides to records, virtual exhibits, and access to online database.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/municipal-archives",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 77,
          "tabletSmallTapTargets": 85,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 77,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 85,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 77 small targets on mobile and 85 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 55,
          "externalScriptsWithoutIntegrity": 55,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:27:11 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "55 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 43,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 9,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 9 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 9,
            "lazyImages": 1,
            "totalIframes": 1,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/9 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 8,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 143137.3,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 51684.299999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 41160,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25402,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 50.47 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 40.20 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 636849.3,
        "totalEstimatedBlockingMs": 1796,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270022,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 181539,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 177 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1796,
            "displayValue": "Est savings of 1,800 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 51684.299999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 50 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42151,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 41160,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 40 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25402,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.69 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 177.28 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1796 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 50.47 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.16 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 40.20 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 55,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "55 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 597334.0050279332
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 583.33 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 583.33 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 13,
        "urgency": "high",
        "transferBytes": 1802311,
        "css": {
          "unusedBytes": 181539,
          "ratio": 0.10072567941936769,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270022,
          "duplicatedBytes": 0,
          "ratio": 0.14981987015559467,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 181539,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270022,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 22,
        "urgency": "high",
        "transferBytes": 1802311,
        "estimatedDeferrableBytes": 493712,
        "renderBlockingMs": 1796,
        "breakdown": {
          "offscreenImageSavings": 42151,
          "unusedJavascriptSavings": 270022,
          "unusedCssSavings": 181539
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42151,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270022,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 181539,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1796,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from scontent-lhr8-2.xx.fbcdn.net",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 322643,
            "url": "https://scontent-lhr8-2.xx.fbcdn.net/v/t39.30808-6/481257907_1038068985018113_7395004081445857465_n.jpg?_nc_cat=106&ccb=1-7&_nc_sid=e289f2&_nc_ohc=fS-Kfadd00YQ7kNvwGJg824&_nc_oc=Adq8pAx41INmxiPEr01Wonr9zcinsGg-6pu4QizEydScIiVcvah0hLykhi_mMyp1luo&_nc_zt=23&_nc_ht=scontent-lhr8-2.xx&edm=AN6CN6oEAAAA&_nc_gid=p04U7vAiKXwBC2PZA4SFmA&oh=00_Af2ixJ-q0G_xihXd30pDs92IDjWpMnzQk83pbn9qgglPxA&oe=69F03DDB",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from static.xx.fbcdn.net",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 204470,
            "url": "https://static.xx.fbcdn.net/rsrc.php/v4ixcg4/yl/l/en_US-j/7PiJ-6XVtiI.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162985,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 85,
        "urgency": "high",
        "providerCount": 6,
        "requestCount": 56,
        "transferBytes": 1016905,
        "notGreenCount": 2,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622083,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "static.xx.fbcdn.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 204470,
            "sampleUrl": "https://static.xx.fbcdn.net/rsrc.php/v4ixcg4/yl/l/en_US-j/7PiJ-6XVtiI.js",
            "greenCheck": {
              "hostname": "static.xx.fbcdn.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-22T21:10:08.176146",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.xx.fbcdn.net",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156246,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20829,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11088,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2189,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972417075&cv=11&fst=1776972417075&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fmunicipal-archives&rcb=14&frm=0&tiba=Municipal%20Archives%20%7C%20Halifax%20History%20%7C%20Search%20Archives%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 6 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "2 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 31,
        "urgency": "medium",
        "transferBytes": 1802311,
        "estimatedRedundantBytes": 451561,
        "redundancyRatio": 0.2505455495749624,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270022,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 181539,
            "displayValue": "Est savings of 177 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270022,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 181539,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 35,
        "urgency": "high",
        "totalTransferBytes": 1802311,
        "heavyRequestCount": 6,
        "heavyBytes": 1149196,
        "heavyRatio": 0.6376235843869343,
        "heavyRequests": [
          {
            "url": "https://scontent-lhr8-2.xx.fbcdn.net/v/t39.30808-6/481257907_1038068985018113_7395004081445857465_n.jpg?_nc_cat=106&ccb=1-7&_nc_sid=e289f2&_nc_ohc=fS-Kfadd00YQ7kNvwGJg824&_nc_oc=Adq8pAx41INmxiPEr01Wonr9zcinsGg-6pu4QizEydScIiVcvah0hLykhi_mMyp1luo&_nc_zt=23&_nc_ht=scontent-lhr8-2.xx&edm=AN6CN6oEAAAA&_nc_gid=p04U7vAiKXwBC2PZA4SFmA&oh=00_Af2ixJ-q0G_xihXd30pDs92IDjWpMnzQk83pbn9qgglPxA&oe=69F03DDB",
            "transferSize": 322643,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "scontent-lhr8-2.xx.fbcdn.net"
          },
          {
            "url": "https://static.xx.fbcdn.net/rsrc.php/v4ixcg4/yl/l/en_US-j/7PiJ-6XVtiI.js",
            "transferSize": 204470,
            "resourceType": "script",
            "mimeType": "application/x-javascript",
            "domain": "static.xx.fbcdn.net"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162985,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162255,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160378,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136465,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 5,
            "transferBytes": 826553
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 322643
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622083
          },
          {
            "domain": "scontent-lhr8-2.xx.fbcdn.net",
            "count": 1,
            "transferBytes": 322643
          },
          {
            "domain": "static.xx.fbcdn.net",
            "count": 1,
            "transferBytes": 204470
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42151,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270022,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from scontent-lhr8-2.xx.fbcdn.net",
            "urgency": "high",
            "estimatedSavingsBytes": 322643,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://scontent-lhr8-2.xx.fbcdn.net/v/t39.30808-6/481257907_1038068985018113_7395004081445857465_n.jpg?_nc_cat=106&ccb=1-7&_nc_sid=e289f2&_nc_ohc=fS-Kfadd00YQ7kNvwGJg824&_nc_oc=Adq8pAx41INmxiPEr01Wonr9zcinsGg-6pu4QizEydScIiVcvah0hLykhi_mMyp1luo&_nc_zt=23&_nc_ht=scontent-lhr8-2.xx&edm=AN6CN6oEAAAA&_nc_gid=p04U7vAiKXwBC2PZA4SFmA&oh=00_Af2ixJ-q0G_xihXd30pDs92IDjWpMnzQk83pbn9qgglPxA&oe=69F03DDB",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from static.xx.fbcdn.net",
            "urgency": "medium",
            "estimatedSavingsBytes": 204470,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://static.xx.fbcdn.net/rsrc.php/v4ixcg4/yl/l/en_US-j/7PiJ-6XVtiI.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162985,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.03,
          "displayValue": "7.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 7.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 177 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 177 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,800 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,800 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.76,
          "displayValue": "4.3 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 50 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 50 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,489 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,489 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/regional-community-planning",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/regional-community-planning",
      "performanceScore": 0.56,
      "bestPracticesScore": 0.79,
      "transferBytes": 1250771,
      "co2Grams": 0.47914710575939995,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622004,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 202606,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156085,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20832,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11088,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2246,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972441720&cv=11&fst=1776972441720&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~117884344~118167060~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning&rcb=15&frm=0&tiba=Regional%20and%20community%20planning%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Regional and community planning | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Regional and Community Planning",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/regional-community-planning",
          "ogTitle": "Regional & Community Planning",
          "ogDescription": "Regional and Community Planning",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/regional-community-planning",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 73,
          "tabletSmallTapTargets": 87,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 73,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 87,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 73 small targets on mobile and 87 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:27:34 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 34,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 11,
          "imagesWithLazy": 3,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 11 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 11,
            "lazyImages": 3,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 3/11 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 13,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 157270,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 58872.99999999999,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 35312,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 38194,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 57.49 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.48 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 37.30 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 625678,
        "totalEstimatedBlockingMs": 1161,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270445,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 155852,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 152 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1161,
            "displayValue": "Est savings of 1,160 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 58872.99999999999,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 57 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42111,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 35312,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 34 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 38194,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 37 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.11 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 152.20 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1161 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 57.49 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.12 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 34.48 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 565597.3749999999
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 552.34 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 552.34 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1250771,
        "css": {
          "unusedBytes": 155852,
          "ratio": 0.12460474379402785,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270445,
          "duplicatedBytes": 0,
          "ratio": 0.21622263387942317,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 155852,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270445,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 22,
        "urgency": "high",
        "transferBytes": 1250771,
        "estimatedDeferrableBytes": 468408,
        "renderBlockingMs": 1161,
        "breakdown": {
          "offscreenImageSavings": 42111,
          "unusedJavascriptSavings": 270445,
          "unusedCssSavings": 155852
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42111,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270445,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 155852,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1161,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162975,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 812255,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622004,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156085,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20832,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11088,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2246,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972441720&cv=11&fst=1776972441720&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~117884344~118167060~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning&rcb=15&frm=0&tiba=Regional%20and%20community%20planning%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 36,
        "urgency": "medium",
        "transferBytes": 1250771,
        "estimatedRedundantBytes": 426297,
        "redundancyRatio": 0.340827377673451,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270445,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 155852,
            "displayValue": "Est savings of 152 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270445,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 155852,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 29,
        "urgency": "medium",
        "totalTransferBytes": 1250771,
        "heavyRequestCount": 4,
        "heavyBytes": 622004,
        "heavyRatio": 0.49729646753882206,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162975,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162224,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160340,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136465,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622004
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622004
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42111,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270445,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162975,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.31,
          "displayValue": "4.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 152 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 152 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,160 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,160 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,420 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,420 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.52,
          "displayValue": "5.6 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 57 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 57 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 37 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 37 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,569 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,569 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/volunteering",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/volunteering",
      "performanceScore": 0.41,
      "bestPracticesScore": 0.79,
      "transferBytes": 1179693,
      "co2Grams": 0.45191844601020004,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622035,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 202545,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156113,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20832,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11088,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2191,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972463796&cv=11&fst=1776972463796&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fvolunteering&rcb=9&frm=0&tiba=Volunteering%20%7C%20Volunteer%20%7C%20Volunteer%20Awards%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Volunteering | Volunteer | Volunteer Awards | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Volunteering",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/volunteering",
          "ogTitle": "Volunteering",
          "ogDescription": "Volunteering",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/volunteering",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 74,
          "tabletSmallTapTargets": 81,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 74,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 81,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 74 small targets on mobile and 81 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:27:57 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 126358.85,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 35298,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 40795.85,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.47 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 39.84 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 595242.85,
        "totalEstimatedBlockingMs": 1515,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270820,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 155952,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 152 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1515,
            "displayValue": "Est savings of 1,520 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 35298,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 34 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 40795.85,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 40 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.47 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 152.30 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1515 ms."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 34.47 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 499644.6000000001
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 487.93 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 487.93 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1179693,
        "css": {
          "unusedBytes": 155952,
          "ratio": 0.13219710551813058,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270820,
          "duplicatedBytes": 0,
          "ratio": 0.2295682012184526,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 155952,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270820,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 26,
        "urgency": "high",
        "transferBytes": 1179693,
        "estimatedDeferrableBytes": 468884,
        "renderBlockingMs": 1515,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270820,
          "unusedCssSavings": 155952
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270820,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 155952,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1515,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163015,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 812259,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622035,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156113,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20832,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11088,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2191,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972463796&cv=11&fst=1776972463796&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fvolunteering&rcb=9&frm=0&tiba=Volunteering%20%7C%20Volunteer%20%7C%20Volunteer%20Awards%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 37,
        "urgency": "medium",
        "transferBytes": 1179693,
        "estimatedRedundantBytes": 426772,
        "redundancyRatio": 0.36176530673658314,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270820,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 155952,
            "displayValue": "Est savings of 152 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270820,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 155952,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1179693,
        "heavyRequestCount": 4,
        "heavyBytes": 622035,
        "heavyRatio": 0.5272854886822249,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163015,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
            "transferSize": 162208,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
            "transferSize": 160335,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
            "transferSize": 136477,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622035
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622035
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270820,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163015,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.36,
          "displayValue": "4.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 152 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 152 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,520 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,520 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,360 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,360 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.54,
          "displayValue": "5.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 40 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 40 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,241 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,241 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/affordable-access-program",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/affordable-access-program",
      "performanceScore": 0.4,
      "bestPracticesScore": 0.79,
      "transferBytes": 1171814,
      "co2Grams": 0.44890014765960007,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622014,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 176239,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156245,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20837,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11088,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2226,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972487436&cv=11&fst=1776972487436&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266400~117384406~118167060~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Faffordable-access-program&rcb=17&frm=0&tiba=Affordable%20Access%20%7C%20Transit%20Pass%20%7C%20Rec%20%7C%20Property%20Tax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Affordable Access | Transit Pass | Rec | Property Tax | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The Affordable Access Program allows residents to apply for municipal assistance with Recreation programming, Halifax Transit and Property Tax payment programs from a single form.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/affordable-access-program",
          "ogTitle": "Affordable Access Program",
          "ogDescription": "The Affordable Access Program allows residents to apply for municipal assistance with Recreation programming, Halifax Transit and Property Tax payment programs from a single form.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/affordable-access-program",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 72,
          "tabletSmallTapTargets": 76,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 72,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 72 small targets on mobile and 76 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:28:19 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 13,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 148661.4,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 59794.4,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29529,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 34447,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 58.39 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.84 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 33.64 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 577941.4,
        "totalEstimatedBlockingMs": 606,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269847,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 117282,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 115 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 59794.4,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 58 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42151,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 29529,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 606,
            "displayValue": "Est savings of 610 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 34447,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 34 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.52 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 114.53 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 58.39 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.16 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 28.84 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 492492.48333333334
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 480.95 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 480.95 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1171814,
        "css": {
          "unusedBytes": 117282,
          "ratio": 0.1000858498021017,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269847,
          "duplicatedBytes": 0,
          "ratio": 0.23028142691587572,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 117282,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269847,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1171814,
        "estimatedDeferrableBytes": 429280,
        "renderBlockingMs": 606,
        "breakdown": {
          "offscreenImageSavings": 42151,
          "unusedJavascriptSavings": 269847,
          "unusedCssSavings": 117282
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42151,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269847,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 117282,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 606,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162985,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 812410,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622014,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156245,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20837,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11088,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2226,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972487436&cv=11&fst=1776972487436&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266400~117384406~118167060~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Faffordable-access-program&rcb=17&frm=0&tiba=Affordable%20Access%20%7C%20Transit%20Pass%20%7C%20Rec%20%7C%20Property%20Tax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 38,
        "urgency": "medium",
        "transferBytes": 1171814,
        "estimatedRedundantBytes": 387129,
        "redundancyRatio": 0.33036727671797744,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269847,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 117282,
            "displayValue": "Est savings of 115 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269847,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 117282,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 31,
        "urgency": "medium",
        "totalTransferBytes": 1171814,
        "heavyRequestCount": 4,
        "heavyBytes": 622014,
        "heavyRatio": 0.5308129105813721,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162985,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162224,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160340,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136465,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622014
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622014
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42151,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269847,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162985,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "11.4 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 11.4 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.44,
          "displayValue": "6.2 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 6.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 115 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 115 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 58 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 58 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 34 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 34 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 610 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 610 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 610 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 610 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,175 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,175 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/city-hall/legislation-by-laws/public-notices",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/city-hall/legislation-by-laws/public-notices",
      "performanceScore": 0.54,
      "bestPracticesScore": 0.79,
      "transferBytes": 1289956,
      "co2Grams": 0.49415815041840006,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622011,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 326298,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174918,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20841,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11088,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2269,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972507318&cv=11&fst=1776972507318&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401~118167060~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Flegislation-by-laws%2Fpublic-notices&rcb=18&frm=0&tiba=Public%20Notices%20%7C%20Municipal%20Government%20%7C%20By-law%20%7C%20Tax%20sale%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Public Notices | Municipal Government | By-law | Tax sale | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax Regional Municipality's Public Notices, By-law notices, Tax Sale notices, and more.",
          "robots": "",
          "canonical": "https://www.halifax.ca/city-hall/legislation-by-laws/public-notices",
          "ogTitle": "Public Notices",
          "ogDescription": "Halifax Regional Municipality's Public Notices, By-law notices, Tax Sale notices, and more.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/city-hall/legislation-by-laws/public-notices",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 71,
          "tabletSmallTapTargets": 77,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 71,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 77,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 71 small targets on mobile and 77 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:28:39 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 145600.05,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 60566,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30326.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 59.15 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 733659.05,
        "totalEstimatedBlockingMs": 1786,
        "opportunities": [
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 275171,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 269 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270776,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1786,
            "displayValue": "Est savings of 1,790 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 60566,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 59 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30326.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 268.72 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.43 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1786 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 59.15 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 28.65 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 609908.8166666669
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 595.61 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 595.61 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 19,
        "urgency": "high",
        "transferBytes": 1289956,
        "css": {
          "unusedBytes": 275171,
          "ratio": 0.2133181286803581,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270776,
          "duplicatedBytes": 0,
          "ratio": 0.20991103572524955,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 275171,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270776,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 27,
        "urgency": "high",
        "transferBytes": 1289956,
        "estimatedDeferrableBytes": 588059,
        "renderBlockingMs": 1786,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270776,
          "unusedCssSavings": 275171
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270776,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 275171,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1786,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162985,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 831127,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622011,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174918,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20841,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11088,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2269,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972507318&cv=11&fst=1776972507318&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401~118167060~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Flegislation-by-laws%2Fpublic-notices&rcb=18&frm=0&tiba=Public%20Notices%20%7C%20Municipal%20Government%20%7C%20By-law%20%7C%20Tax%20sale%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 41,
        "urgency": "high",
        "transferBytes": 1289956,
        "estimatedRedundantBytes": 545947,
        "redundancyRatio": 0.42322916440560765,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 275171,
            "displayValue": "Est savings of 269 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270776,
            "displayValue": "Est savings of 264 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 275171,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270776,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 34,
        "urgency": "medium",
        "totalTransferBytes": 1289956,
        "heavyRequestCount": 5,
        "heavyBytes": 785451,
        "heavyRatio": 0.6088975127833818,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162985,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162224,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160337,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136465,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622011
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622011
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270776,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162985,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.3,
          "displayValue": "4.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 269 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 269 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 30 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,790 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,790 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 710 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 710 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.71,
          "displayValue": "4.6 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,194 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,194 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/regional-community-planning/shape-your-city",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/regional-community-planning/shape-your-city",
      "performanceScore": 0.48,
      "bestPracticesScore": 0.79,
      "transferBytes": 1395384,
      "co2Grams": 0.5345456562576001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622011,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 164653,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157083,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11096,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2197,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972529032&cv=11&fst=1776972529032&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401~118690341&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning%2Fshape-your-city&rcb=9&frm=0&tiba=Engage%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Engage Halifax | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Ever want to share your input on a project or public engagement but can't attend a meeting? Use Engage Halifax to connect you to the community issues that matter to you, on your own time.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/regional-community-planning/shape-your-city",
          "ogTitle": "Engage Halifax",
          "ogDescription": "Ever want to share your input on a project or public engagement but can't attend a meeting? Use Engage Halifax to connect you to the community issues that matter to you, on your own time.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/regional-community-planning/shape-your-city",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 74,
          "tabletSmallTapTargets": 89,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 74,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 89,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 74 small targets on mobile and 89 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:29:01 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 10,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 10
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "10 of 10 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 10,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/10 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 25,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 343541.8,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 266577.8,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26618,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25455,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.33 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.99 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.86 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1021241.8,
        "totalEstimatedBlockingMs": 1555,
        "opportunities": [
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 289695,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 283 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270539,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 266577.8,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 260 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1555,
            "displayValue": "Est savings of 1,560 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 117466,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 115 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26618,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25455,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 282.91 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.20 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 260.33 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1555 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 114.71 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 25.99 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 708707.0666666671
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 692.10 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 692.10 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 14,
        "urgency": "high",
        "transferBytes": 1395384,
        "css": {
          "unusedBytes": 117466,
          "ratio": 0.0841818452841655,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270539,
          "duplicatedBytes": 0,
          "ratio": 0.19388139752211578,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 117466,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270539,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 30,
        "urgency": "high",
        "transferBytes": 1395384,
        "estimatedDeferrableBytes": 677700,
        "renderBlockingMs": 1555,
        "breakdown": {
          "offscreenImageSavings": 289695,
          "unusedJavascriptSavings": 270539,
          "unusedCssSavings": 117466
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 289695,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270539,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 117466,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1555,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162985,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 813230,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622011,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157083,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11096,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2197,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972529032&cv=11&fst=1776972529032&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401~118690341&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning%2Fshape-your-city&rcb=9&frm=0&tiba=Engage%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 33,
        "urgency": "medium",
        "transferBytes": 1395384,
        "estimatedRedundantBytes": 388005,
        "redundancyRatio": 0.2780632428062813,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270539,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 117466,
            "displayValue": "Est savings of 115 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270539,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 117466,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 38,
        "urgency": "medium",
        "totalTransferBytes": 1395384,
        "heavyRequestCount": 5,
        "heavyBytes": 869766,
        "heavyRatio": 0.623316592421871,
        "heavyRequests": [
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162985,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162221,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160340,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136465,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622011
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622011
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 289695,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270539,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162985,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 115 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 115 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,560 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,560 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,370 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,370 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.6,
          "displayValue": "3.6 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 3.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.58,
          "displayValue": "5.3 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 260 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 260 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 283 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 283 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,620 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,620 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home/stay-informed/",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home/stay-informed",
      "performanceScore": 0.55,
      "bestPracticesScore": 0.79,
      "transferBytes": 1210369,
      "co2Grams": 0.4636698510366,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622016,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156846,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 148524,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11106,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2183,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972549103&cv=11&fst=1776972549103&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome%2Fstay-informed&rcb=8&frm=0&tiba=Stay%20informed%2C%20stay%20connected%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Stay informed, stay connected | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Service alerts, emergency notifications, public engagement opportunities or updates on programs and events, residents have more ways than ever to stay connected.",
          "robots": "",
          "canonical": "https://www.halifax.ca/home/stay-informed",
          "ogTitle": "Stay informed, stay connected",
          "ogDescription": "Service alerts, emergency notifications, public engagement opportunities or updates on programs and events, residents have more ways than ever to stay connected.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home/stay-informed",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 73,
          "tabletSmallTapTargets": 77,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 73,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 77,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 73 small targets on mobile and 77 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:29:27 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 11,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 11
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "11 of 11 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 11,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/11 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 12,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 146288.7,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 60493.700000000004,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 23474,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 37430,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 59.08 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.92 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 36.55 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 562607.7,
        "totalEstimatedBlockingMs": 703,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270339,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 103868,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 101 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 60493.700000000004,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 59 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 23474,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 23 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 703,
            "displayValue": "Est savings of 700 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 37430,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 37 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.00 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 101.43 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 59.08 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 22.92 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 521574.63333333354
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 509.35 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 509.35 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1210369,
        "css": {
          "unusedBytes": 103868,
          "ratio": 0.08581515223869746,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270339,
          "duplicatedBytes": 0,
          "ratio": 0.2233525478593718,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 103868,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270339,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1210369,
        "estimatedDeferrableBytes": 416319,
        "renderBlockingMs": 703,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270339,
          "unusedCssSavings": 103868
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270339,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 103868,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 703,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162985,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 812994,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622016,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156846,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11106,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2183,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972549103&cv=11&fst=1776972549103&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome%2Fstay-informed&rcb=8&frm=0&tiba=Stay%20informed%2C%20stay%20connected%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 37,
        "urgency": "medium",
        "transferBytes": 1210369,
        "estimatedRedundantBytes": 374207,
        "redundancyRatio": 0.30916770009806926,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270339,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 103868,
            "displayValue": "Est savings of 101 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270339,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 103868,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1210369,
        "heavyRequestCount": 4,
        "heavyBytes": 622016,
        "heavyRatio": 0.5139060897957565,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162985,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162224,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160340,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136467,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622016
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622016
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270339,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162985,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "9.6 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 9.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 101 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 101 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 700 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 700 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,230 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,230 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.73,
          "displayValue": "4.4 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.4 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 59 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 59 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 37 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 37 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,350 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,350 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home-property",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home-property",
      "performanceScore": 0.56,
      "bestPracticesScore": 0.79,
      "transferBytes": 2075867,
      "co2Grams": 0.7952260365738,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622030,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 69,
            "transferBytes": 313094,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173539,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11114,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2176,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972574598&cv=11&fst=1776972574598&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~118128923&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property&rcb=0&frm=0&tiba=Home%20%26%20Property%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Home & Property | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Information on animal services, property taxes, solid waste collection and more.",
          "robots": "",
          "canonical": "https://www.halifax.ca/home-property",
          "ogTitle": "Home & Property",
          "ogDescription": "Information on animal services, property taxes, solid waste collection and more.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home-property",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 75,
          "tabletSmallTapTargets": 76,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 75,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 75 small targets on mobile and 76 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:29:47 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 18,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 18
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "18 of 18 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 18,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/18 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 35,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 735973.05,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 480045.05,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "estimatedSavingsBytes": 168820,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 57774,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 468.79 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 164.86 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 56.42 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1310682.05,
        "totalEstimatedBlockingMs": 1480,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 480045.05,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 469 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270877,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 261720,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 256 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1480,
            "displayValue": "Est savings of 1,480 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 168820,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 165 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 57774,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 56 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 468.79 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.53 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 255.59 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1480 ms."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 164.86 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 56.42 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1388107.841666667
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.32 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.32 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 13,
        "urgency": "high",
        "transferBytes": 2075867,
        "css": {
          "unusedBytes": 261720,
          "ratio": 0.12607744137750637,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270877,
          "duplicatedBytes": 0,
          "ratio": 0.13048861030114164,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 261720,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270877,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 22,
        "urgency": "high",
        "transferBytes": 2075867,
        "estimatedDeferrableBytes": 574709,
        "renderBlockingMs": 1480,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270877,
          "unusedCssSavings": 261720
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270877,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 261720,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1480,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 393548,
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/home-property.jpg?itok=kyuH0GjL",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162989,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 829702,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622030,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173539,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11114,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2176,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972574598&cv=11&fst=1776972574598&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~118128923&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property&rcb=0&frm=0&tiba=Home%20%26%20Property%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 34,
        "urgency": "high",
        "transferBytes": 2075867,
        "estimatedRedundantBytes": 532597,
        "redundancyRatio": 0.256566051678648,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270877,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 261720,
            "displayValue": "Est savings of 256 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270877,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 261720,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 32,
        "urgency": "high",
        "totalTransferBytes": 2075867,
        "heavyRequestCount": 6,
        "heavyBytes": 1179018,
        "heavyRatio": 0.5679641325768944,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/home-property.jpg?itok=kyuH0GjL",
            "transferSize": 393548,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162989,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162228,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160344,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136469,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622030
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 393548
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622030
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 2,
            "transferBytes": 556988
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270877,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 393548,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/home-property.jpg?itok=kyuH0GjL",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162989,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "13.2 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 13.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 265 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 256 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 256 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 469 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 469 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 165 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 165 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,480 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,480 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.83,
          "displayValue": "3.8 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,397 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,397 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home-property/animal-services",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home-property/animal-services",
      "performanceScore": 0.46,
      "bestPracticesScore": 0.79,
      "transferBytes": 1175227,
      "co2Grams": 0.45020760447780006,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622024,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 75,
            "transferBytes": 202913,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 159220,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11117,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2186,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972595303&cv=11&fst=1776972595303&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266400~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fanimal-services&rcb=11&frm=0&tiba=Animal%20Services%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Animal Services | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Animal Services",
          "robots": "",
          "canonical": "https://www.halifax.ca/home-property/animal-services",
          "ogTitle": "Animal Services",
          "ogDescription": "Animal Services",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home-property/animal-services",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 71,
          "tabletSmallTapTargets": 76,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 71,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 71 small targets on mobile and 76 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:30:09 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 10,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 115901.04999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 35130,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30416.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25464,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.31 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.70 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.87 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 582459.05,
        "totalEstimatedBlockingMs": 2069,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269238,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 263 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 155082,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 151 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2069,
            "displayValue": "Est savings of 2,070 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42238,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 35130,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 34 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30416.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25464,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 262.93 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 151.45 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 2069 ms."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.25 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 34.31 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 495203.2416666668
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 483.60 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 483.60 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1175227,
        "css": {
          "unusedBytes": 155082,
          "ratio": 0.13195918745910365,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269238,
          "duplicatedBytes": 0,
          "ratio": 0.229094464303492,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 155082,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269238,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 26,
        "urgency": "high",
        "transferBytes": 1175227,
        "estimatedDeferrableBytes": 466558,
        "renderBlockingMs": 2069,
        "breakdown": {
          "offscreenImageSavings": 42238,
          "unusedJavascriptSavings": 269238,
          "unusedCssSavings": 155082
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42238,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269238,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 155082,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2069,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162986,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 815390,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622024,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 159220,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11117,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2186,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972595303&cv=11&fst=1776972595303&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266400~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fanimal-services&rcb=11&frm=0&tiba=Animal%20Services%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 37,
        "urgency": "medium",
        "transferBytes": 1175227,
        "estimatedRedundantBytes": 424320,
        "redundancyRatio": 0.36105365176259563,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269238,
            "displayValue": "Est savings of 263 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 155082,
            "displayValue": "Est savings of 151 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269238,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 155082,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1175227,
        "heavyRequestCount": 4,
        "heavyBytes": 622024,
        "heavyRatio": 0.5292798752921776,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162986,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
            "transferSize": 162214,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
            "transferSize": 160341,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
            "transferSize": 136483,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622024
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622024
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42238,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269238,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162986,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.02,
          "displayValue": "8.3 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 8.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 263 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 263 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 151 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 151 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 2,070 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 2,070 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 820 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 820 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.55,
          "displayValue": "5.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,204 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,204 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home-property/building-development-permits",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home-property/building-development-permits",
      "performanceScore": 0.56,
      "bestPracticesScore": 0.79,
      "transferBytes": 1301250,
      "co2Grams": 0.4984846717500001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622061,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 77,
            "transferBytes": 227964,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158138,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11117,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2222,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972616742&cv=11&fst=1776972616742&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266400~117384405&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fbuilding-development-permits&rcb=10&frm=0&tiba=Building%20%26%20Development%20Permits%20%7C%20Apply%20%7C%20Construction%20%7C%20Fees%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Building & Development Permits | Apply | Construction | Fees | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Building & Development Permits covers all your permit needs. You can find permitting information such as, permit fees, when is a permit required, how to apply online and information about the new Permitting, Planning, Licencing, & Compliance Solution.",
          "robots": "",
          "canonical": "https://www.halifax.ca/home-property/building-development-permits",
          "ogTitle": "Building & Development Permits",
          "ogDescription": "Building & Development Permits covers all your permit needs. You can find permitting information such as, permit fees, when is a permit required, how to apply online and information about the new Permitting, Planning, Licencing, & Compliance Solution.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home-property/building-development-permits",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 72,
          "tabletSmallTapTargets": 81,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 72,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 81,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 72 small targets on mobile and 81 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:30:31 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 38,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 10,
          "imagesWithLazy": 2,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 10 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 10,
            "lazyImages": 2,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 2/10 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 15,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 197428.8,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 95006.8,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 40876,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 36655,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 92.78 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 39.92 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 35.80 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 691253.8,
        "totalEstimatedBlockingMs": 1419,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 271203,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 180514,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 176 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1419,
            "displayValue": "Est savings of 1,420 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 95006.8,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 93 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42108,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 40876,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 40 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 36655,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 36 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.85 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 176.28 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1419 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 92.78 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.12 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 39.92 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 617913.0666666667
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 603.43 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 603.43 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1301250,
        "css": {
          "unusedBytes": 180514,
          "ratio": 0.13872353506243995,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 271203,
          "duplicatedBytes": 0,
          "ratio": 0.20841729106628243,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 180514,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 271203,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 24,
        "urgency": "high",
        "transferBytes": 1301250,
        "estimatedDeferrableBytes": 493825,
        "renderBlockingMs": 1419,
        "breakdown": {
          "offscreenImageSavings": 42108,
          "unusedJavascriptSavings": 271203,
          "unusedCssSavings": 180514
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42108,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 271203,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 180514,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1419,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162996,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 814381,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622061,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158138,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11117,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2222,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972616742&cv=11&fst=1776972616742&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266400~117384405&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fbuilding-development-permits&rcb=10&frm=0&tiba=Building%20%26%20Development%20Permits%20%7C%20Apply%20%7C%20Construction%20%7C%20Fees%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 37,
        "urgency": "medium",
        "transferBytes": 1301250,
        "estimatedRedundantBytes": 451717,
        "redundancyRatio": 0.3471408261287224,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 271203,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 180514,
            "displayValue": "Est savings of 176 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 271203,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 180514,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 28,
        "urgency": "medium",
        "totalTransferBytes": 1301250,
        "heavyRequestCount": 4,
        "heavyBytes": 622061,
        "heavyRatio": 0.47804879923150817,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162996,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162235,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160351,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136479,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622061
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622061
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42108,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 271203,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162996,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.35,
          "displayValue": "4.6 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 176 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 176 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,420 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,420 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 930 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 930 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.74,
          "displayValue": "4.4 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.4 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 265 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 93 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 93 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 36 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 36 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,325 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,325 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home-property/civic-addressing",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home-property/civic-addressing",
      "performanceScore": 0.58,
      "bestPracticesScore": 0.79,
      "transferBytes": 1069111,
      "co2Grams": 0.4095565386354,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622057,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158155,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 70,
            "transferBytes": 121524,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2208,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972640249&cv=11&fst=1776972640249&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fcivic-addressing&rcb=8&frm=0&tiba=Civic%20Addressing%20%7C%20Street%20List%20%7C%20New%20addresses%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Civic Addressing | Street List | New addresses | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Civic Addressing staff manage and assign all civic addresses within the municipality. They also approve all new street names and confirm community boundaries. Civic addressing is responsible for correcting addressing issues that may result in renaming and or renumbering of existing streets under By-law C-300 and Administrative Order #29.",
          "robots": "",
          "canonical": "https://www.halifax.ca/home-property/civic-addressing",
          "ogTitle": "Civic addressing",
          "ogDescription": "Civic Addressing staff manage and assign all civic addresses within the municipality. They also approve all new street names and confirm community boundaries. Civic addressing is responsible for correcting addressing issues that may result in renaming and or renumbering of existing streets under By-law C-300 and Administrative Order #29.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home-property/civic-addressing",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 73,
          "tabletSmallTapTargets": 77,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 73,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 77,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 73 small targets on mobile and 77 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:30:51 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 9,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 98196.04999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30326.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "low",
            "estimatedSavingsBytes": 17605,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "low",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 17.19 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 489018.05,
        "totalEstimatedBlockingMs": 560,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270592,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 78118,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 76 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 560,
            "displayValue": "Est savings of 560 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30326.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 17605,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 17 KiB",
            "urgency": "low",
            "sourceAuditId": "unminified-css"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.25 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 76.29 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "medium",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 560 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "low",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 29.62 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 390220.4500000002
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 381.07 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 381.07 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1069111,
        "css": {
          "unusedBytes": 78118,
          "ratio": 0.07306818468802584,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270592,
          "duplicatedBytes": 0,
          "ratio": 0.2531000055186038,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 78118,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270592,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 16,
        "urgency": "medium",
        "transferBytes": 1069111,
        "estimatedDeferrableBytes": 390822,
        "renderBlockingMs": 560,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270592,
          "unusedCssSavings": 78118
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270592,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 78118,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 560,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162996,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 814382,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622057,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158155,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2208,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972640249&cv=11&fst=1776972640249&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fcivic-addressing&rcb=8&frm=0&tiba=Civic%20Addressing%20%7C%20Street%20List%20%7C%20New%20addresses%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 38,
        "urgency": "medium",
        "transferBytes": 1069111,
        "estimatedRedundantBytes": 348710,
        "redundancyRatio": 0.3261681902066296,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270592,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 78118,
            "displayValue": "Est savings of 76 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270592,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 78118,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 33,
        "urgency": "medium",
        "totalTransferBytes": 1069111,
        "heavyRequestCount": 4,
        "heavyBytes": 622057,
        "heavyRatio": 0.581845103080971,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162996,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160346,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136479,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622057
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622057
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270592,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162996,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.29,
          "displayValue": "4.9 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 76 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 76 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 560 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 560 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,090 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,090 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.84,
          "displayValue": "3.8 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,162 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,162 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home-property/garbage-recycling-green-cart",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home-property/garbage-recycling-green-cart",
      "performanceScore": 0.47,
      "bestPracticesScore": 0.79,
      "transferBytes": 1648665,
      "co2Grams": 0.631572896331,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622060,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "static.xx.fbcdn.net",
            "resourceType": "script",
            "requestCount": 10,
            "transferBytes": 250556,
            "sampleUrl": "https://static.xx.fbcdn.net/rsrc.php/v4/yM/r/9v0tUotCmWM.js",
            "greenCheck": {
              "hostname": "static.xx.fbcdn.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-22T21:10:08.176146",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.xx.fbcdn.net",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 75,
            "transferBytes": 203076,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 159104,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "static.xx.fbcdn.net",
            "resourceType": "stylesheet",
            "requestCount": 2,
            "transferBytes": 7438,
            "sampleUrl": "https://static.xx.fbcdn.net/rsrc.php/v5/yO/l/0,cross/4TXMIPOtjRG.css",
            "greenCheck": {
              "hostname": "static.xx.fbcdn.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-22T21:10:08.176146",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.xx.fbcdn.net",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2225,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972658534&cv=11&fst=1776972658534&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fgarbage-recycling-green-cart&rcb=2&frm=0&tiba=Garbage%20%7C%20Recycling%20%7C%20Green%20cart%20%7C%20Schedules%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 8,
          "greenCount": 4,
          "notGreenCount": 5,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Garbage | Recycling | Green cart | Schedules | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Garbage, recycling, and green cart schedules for the Halifax region.",
          "robots": "",
          "canonical": "https://www.halifax.ca/home-property/garbage-recycling-green-cart",
          "ogTitle": "Garbage, Recycling, & Green Cart",
          "ogDescription": "Garbage, recycling, and green cart schedules for the Halifax region.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home-property/garbage-recycling-green-cart",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 74,
          "tabletSmallTapTargets": 84,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 74,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 84,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 74 small targets on mobile and 84 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 52,
          "externalScriptsWithoutIntegrity": 52,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:31:13 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "52 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 34,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 11,
          "imagesWithLazy": 3,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 11 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 11,
            "lazyImages": 3,
            "totalIframes": 1,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 3/11 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 23,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 372602.94999999995,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 184972.94999999998,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 127593,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 35146,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 180.64 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 124.60 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.32 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 838673.95,
        "totalEstimatedBlockingMs": 1805,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 268775,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 262 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 155067,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 151 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1805,
            "displayValue": "Est savings of 1,810 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 184972.94999999998,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 181 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 127593,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 125 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42229,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 35146,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 34 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 262.48 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 151.43 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1805 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 180.64 KB."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 124.60 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.24 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 52,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "52 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 688807.4321694599
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 672.66 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 672.66 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 13,
        "urgency": "high",
        "transferBytes": 1648665,
        "css": {
          "unusedBytes": 155067,
          "ratio": 0.09405609993540227,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 268775,
          "duplicatedBytes": 0,
          "ratio": 0.16302584212074617,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 155067,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 268775,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 23,
        "urgency": "high",
        "transferBytes": 1648665,
        "estimatedDeferrableBytes": 466071,
        "renderBlockingMs": 1805,
        "breakdown": {
          "offscreenImageSavings": 42229,
          "unusedJavascriptSavings": 268775,
          "unusedCssSavings": 155067
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42229,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 268775,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 155067,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1805,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162997,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 85,
        "urgency": "high",
        "providerCount": 6,
        "requestCount": 65,
        "transferBytes": 1065907,
        "notGreenCount": 2,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622060,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "static.xx.fbcdn.net",
            "resourceType": "script",
            "requestCount": 10,
            "transferBytes": 250556,
            "sampleUrl": "https://static.xx.fbcdn.net/rsrc.php/v4/yM/r/9v0tUotCmWM.js",
            "greenCheck": {
              "hostname": "static.xx.fbcdn.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-22T21:10:08.176146",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.xx.fbcdn.net",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 159104,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2225,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972658534&cv=11&fst=1776972658534&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fgarbage-recycling-green-cart&rcb=2&frm=0&tiba=Garbage%20%7C%20Recycling%20%7C%20Green%20cart%20%7C%20Schedules%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 6 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "2 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 32,
        "urgency": "medium",
        "transferBytes": 1648665,
        "estimatedRedundantBytes": 423842,
        "redundancyRatio": 0.2570819420561485,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 268775,
            "displayValue": "Est savings of 262 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 155067,
            "displayValue": "Est savings of 151 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 268775,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 155067,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1648665,
        "heavyRequestCount": 6,
        "heavyBytes": 839335,
        "heavyRatio": 0.5090997867971965,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162997,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160351,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136476,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://cdn.halifax.ca/sites/default/files/styles/topic_image_lure/public/2022-08/cc_solidwaste_foodisntgarbage_homepagecard.jpeg?itok=XrFQGWfa",
            "transferSize": 122090,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://static.xx.fbcdn.net/rsrc.php/v4/yM/r/9v0tUotCmWM.js",
            "transferSize": 95185,
            "resourceType": "script",
            "mimeType": "application/x-javascript",
            "domain": "static.xx.fbcdn.net"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 5,
            "transferBytes": 717245
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 122090
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622060
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 122090
          },
          {
            "domain": "static.xx.fbcdn.net",
            "count": 1,
            "transferBytes": 95185
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42229,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 268775,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162997,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "14.0 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 14.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 262 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 262 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 151 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 151 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 181 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 181 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 125 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 125 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,810 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,810 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-rel-preconnect",
          "title": "Preconnect to required origins",
          "description": "Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).",
          "score": 0,
          "displayValue": "Est savings of 590 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Preconnect to required origins\n\n- Lighthouse audit: uses-rel-preconnect\n- Current value: Est savings of 590 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nConsider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.63,
          "displayValue": "5.0 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,351 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,351 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home-property/property-taxes",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home-property/property-taxes",
      "performanceScore": 0.5,
      "bestPracticesScore": 0.79,
      "transferBytes": 1188559,
      "co2Grams": 0.45531484570260006,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622057,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 75,
            "transferBytes": 201070,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156834,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2192,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972682574&cv=11&fst=1776972682574&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401~117384406&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fproperty-taxes&rcb=11&frm=0&tiba=Property%20Taxes%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Property Taxes | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "How tax rates work, information and payment instructions for your annual tax bill",
          "robots": "",
          "canonical": "https://www.halifax.ca/home-property/property-taxes",
          "ogTitle": "Property Taxes",
          "ogDescription": "How tax rates work, information and payment instructions for your annual tax bill",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home-property/property-taxes",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 76,
          "tabletSmallTapTargets": 82,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 82,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 76 small targets on mobile and 82 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:31:34 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 127154.35,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 35040,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 41850.35,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25373,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.22 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 40.87 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 594632.35,
        "totalEstimatedBlockingMs": 1025,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270724,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 154643,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 151 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1025,
            "displayValue": "Est savings of 1,030 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42111,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 35040,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 34 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 41850.35,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25373,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.38 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 151.02 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1025 ms."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.12 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 34.22 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 507845.9999999998
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 495.94 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 495.94 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1188559,
        "css": {
          "unusedBytes": 154643,
          "ratio": 0.13010965379085093,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270724,
          "duplicatedBytes": 0,
          "ratio": 0.2277749779354664,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 154643,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270724,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 1188559,
        "estimatedDeferrableBytes": 467478,
        "renderBlockingMs": 1025,
        "breakdown": {
          "offscreenImageSavings": 42111,
          "unusedJavascriptSavings": 270724,
          "unusedCssSavings": 154643
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42111,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270724,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 154643,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1025,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162997,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 813045,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622057,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156834,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2192,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972682574&cv=11&fst=1776972682574&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401~117384406&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fproperty-taxes&rcb=11&frm=0&tiba=Property%20Taxes%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 40,
        "urgency": "medium",
        "transferBytes": 1188559,
        "estimatedRedundantBytes": 425367,
        "redundancyRatio": 0.35788463172631735,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270724,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 154643,
            "displayValue": "Est savings of 151 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270724,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 154643,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1188559,
        "heavyRequestCount": 4,
        "heavyBytes": 622057,
        "heavyRatio": 0.523370737169968,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162997,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162228,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160351,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622057
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622057
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42111,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270724,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162997,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.01,
          "displayValue": "8.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 8.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 151 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 151 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 41 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,030 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,030 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.87,
          "displayValue": "3.6 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,261 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,261 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home-property/urban-forestry",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home-property/urban-forestry",
      "performanceScore": 0.54,
      "bestPracticesScore": 0.79,
      "transferBytes": 1223789,
      "co2Grams": 0.46881080342460013,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622047,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 187760,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156846,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2192,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972702082&cv=11&fst=1776972702082&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Furban-forestry&rcb=6&frm=0&tiba=Urban%20Forestry%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Urban Forestry | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Explore Halifax’s Urban Forest Management Plan & programs—how the municipality cares for trees and how you can help grow a greener, healthier region.",
          "robots": "",
          "canonical": "https://www.halifax.ca/home-property/urban-forestry",
          "ogTitle": "Urban Forestry",
          "ogDescription": "Explore Halifax’s Urban Forest Management Plan & programs—how the municipality cares for trees and how you can help grow a greener, healthier region.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home-property/urban-forestry",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 71,
          "tabletSmallTapTargets": 76,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 71,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 71 small targets on mobile and 76 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:31:54 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 14,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 166950.6,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 74439.6,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 32136,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 35484,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 72.69 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.38 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 34.65 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 621977.6,
        "totalEstimatedBlockingMs": 1526,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270876,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 142039,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 139 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1526,
            "displayValue": "Est savings of 1,530 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 74439.6,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 73 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 32136,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 31 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 35484,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 35 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.53 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 138.71 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1526 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 72.69 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 31.38 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 543568.8083333335
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 530.83 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 530.83 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1223789,
        "css": {
          "unusedBytes": 142039,
          "ratio": 0.11606494256771388,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270876,
          "duplicatedBytes": 0,
          "ratio": 0.22134207776013676,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 142039,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270876,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 25,
        "urgency": "high",
        "transferBytes": 1223789,
        "estimatedDeferrableBytes": 455027,
        "renderBlockingMs": 1526,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270876,
          "unusedCssSavings": 142039
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270876,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 142039,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1526,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162992,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 813047,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622047,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156846,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2192,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972702082&cv=11&fst=1776972702082&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Furban-forestry&rcb=6&frm=0&tiba=Urban%20Forestry%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 36,
        "urgency": "medium",
        "transferBytes": 1223789,
        "estimatedRedundantBytes": 412915,
        "redundancyRatio": 0.33740702032785064,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270876,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 142039,
            "displayValue": "Est savings of 139 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270876,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 142039,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 29,
        "urgency": "medium",
        "totalTransferBytes": 1223789,
        "heavyRequestCount": 4,
        "heavyBytes": 622047,
        "heavyRatio": 0.5082959562473597,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162992,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162231,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160343,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622047
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622047
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270876,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162992,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.48,
          "displayValue": "4.1 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 139 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 139 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,530 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,530 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 710 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 710 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.8,
          "displayValue": "4.1 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 265 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 73 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 73 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 35 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 35 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,186 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,186 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home-property/building-development-permits/alarm-registration",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home-property/building-development-permits/alarm-registration",
      "performanceScore": 0.42,
      "bestPracticesScore": 0.79,
      "transferBytes": 1760893,
      "co2Grams": 0.6745653556901999,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622066,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 370366,
            "sampleUrl": "https://www.gstatic.com/recaptcha/releases/gTpTIWhbKpxADzTzkcabhXN4/recaptcha__en.js",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 66,
            "transferBytes": 240351,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 83,
            "transferBytes": 184779,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 42608,
            "sampleUrl": "https://www.gstatic.com/recaptcha/releases/gTpTIWhbKpxADzTzkcabhXN4/styles__ltr.css",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2223,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972723719&cv=11&fst=1776972723719&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fbuilding-development-permits%2Falarm-registration&rcb=18&frm=0&tiba=Alarm%20Registration%20%7C%20Permit%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 1064,
            "sampleUrl": "https://www.google.com/recaptcha/api.js?render=6LeToIQaAAAAAJZ3xb0VYD9K8OBdJqFRGCYaxhBq",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 9,
          "greenCount": 7,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 8.75,
        "urgency": "low",
        "pageElementOccurrences": 25,
        "uniqueElementsAssessed": 24,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|civic_number|no-autocomplete|required|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "civic_number",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|unit_apartment|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "unit_apartment",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|street_name_and_type|no-autocomplete|required|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "street_name_and_type",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|city|no-autocomplete|required|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "city",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|select|select|province|no-autocomplete|required|no-pattern|no-minlength",
            "role": "form",
            "controlType": "select",
            "fieldName": "province",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": true,
            "assessment": {
              "score": 0,
              "urgency": "low",
              "issues": [],
              "recommendations": [
                "No obvious validation or tooling gaps detected for this form control signature."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|postal_code|no-autocomplete|required|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "postal_code",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|select|select|this_registration_is_for|no-autocomplete|required|no-pattern|no-minlength",
            "role": "form",
            "controlType": "select",
            "fieldName": "this_registration_is_for",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": true,
            "assessment": {
              "score": 0,
              "urgency": "low",
              "issues": [],
              "recommendations": [
                "No obvious validation or tooling gaps detected for this form control signature."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|business_owner|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "business_owner",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|assessment_account_number|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "assessment_account_number",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|date|effective_date|no-autocomplete|required|no-pattern|no-minlength",
            "role": "form",
            "controlType": "date",
            "fieldName": "effective_date",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": true,
            "assessment": {
              "score": 0,
              "urgency": "low",
              "issues": [],
              "recommendations": [
                "No obvious validation or tooling gaps detected for this form control signature."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|first_name|no-autocomplete|required|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "first_name",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|last_name|no-autocomplete|required|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "last_name",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|tel|phone_number|no-autocomplete|required|no-pattern|no-minlength",
            "role": "form",
            "controlType": "tel",
            "fieldName": "phone_number",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|tel|alternate_phone_number|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "tel",
            "fieldName": "alternate_phone_number",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|email|email[mail_1]|no-autocomplete|required|no-pattern|no-minlength",
            "role": "form",
            "controlType": "email",
            "fieldName": "email[mail_1]",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|email|email[mail_2]|no-autocomplete|required|no-pattern|no-minlength",
            "role": "form",
            "controlType": "email",
            "fieldName": "email[mail_2]",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|radio|mailing_address_same_as_civic_address|no-autocomplete|required|no-pattern|no-minlength",
            "role": "form",
            "controlType": "radio",
            "fieldName": "mailing_address_same_as_civic_address",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": true,
            "assessment": {
              "score": 0,
              "urgency": "low",
              "issues": [],
              "recommendations": [
                "No obvious validation or tooling gaps detected for this form control signature."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|address_1|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "address_1",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|address_2|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "address_2",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|mailing_city_community|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "mailing_city_community",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|mailing_province|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "mailing_province",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|input|text|mailing_postal_code|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "mailing_postal_code",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": false,
            "assessment": {
              "score": 10,
              "urgency": "low",
              "issues": [
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|post|/home-property/building-development-permits/alarm-registration|textarea|textarea|message|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "textarea",
            "fieldName": "message",
            "formContext": "form|post|/home-property/building-development-permits/alarm-registration",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": true,
            "toolingFriendly": true,
            "assessment": {
              "score": 0,
              "urgency": "low",
              "issues": [],
              "recommendations": [
                "No obvious validation or tooling gaps detected for this form control signature."
              ]
            },
            "reusedFromCache": false
          }
        ],
        "recommendations": [
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "19 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Alarm Registration | Permit | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The Alarm By-law also requires that you register your alarm system. There is no charge for this service.",
          "robots": "",
          "canonical": "https://www.halifax.ca/home-property/building-development-permits/alarm-registration",
          "ogTitle": "Alarm registration",
          "ogDescription": "The Alarm By-law also requires that you register your alarm system. There is no charge for this service.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home-property/building-development-permits/alarm-registration",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 72,
          "tabletSmallTapTargets": 82,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 72,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 82,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 72 small targets on mobile and 82 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 68,
          "externalScriptsWithoutIntegrity": 68,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:32:20 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "UNCACHEABLE (poor cacheability)",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "68 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 2,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 7,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 126022.04999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 40418,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29740,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30408.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25456,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 39.47 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 29.04 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.70 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.86 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 747989.05,
        "totalEstimatedBlockingMs": 1800,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 447502,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 437 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 132244,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 129 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1800,
            "displayValue": "Est savings of 1,800 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42221,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 40418,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 39 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 29740,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30408.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25456,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 437.01 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 129.14 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1800 ms."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.23 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 39.47 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 29.04 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 68,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "68 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 593509.8166666665
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 579.60 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 579.60 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1760893,
        "css": {
          "unusedBytes": 132244,
          "ratio": 0.07510053137811326,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 447502,
          "duplicatedBytes": 0,
          "ratio": 0.2541335560990929,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 132244,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 447502,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 25,
        "urgency": "high",
        "transferBytes": 1760893,
        "estimatedDeferrableBytes": 621967,
        "renderBlockingMs": 1800,
        "breakdown": {
          "offscreenImageSavings": 42221,
          "unusedJavascriptSavings": 447502,
          "unusedCssSavings": 132244
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42221,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 447502,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 132244,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1800,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.gstatic.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 370366,
            "url": "https://www.gstatic.com/recaptcha/releases/gTpTIWhbKpxADzTzkcabhXN4/recaptcha__en.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162997,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 7,
        "requestCount": 78,
        "transferBytes": 1268032,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622066,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 370366,
            "sampleUrl": "https://www.gstatic.com/recaptcha/releases/gTpTIWhbKpxADzTzkcabhXN4/recaptcha__en.js",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 66,
            "transferBytes": 240351,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2223,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972723719&cv=11&fst=1776972723719&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fbuilding-development-permits%2Falarm-registration&rcb=18&frm=0&tiba=Alarm%20Registration%20%7C%20Permit%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 1064,
            "sampleUrl": "https://www.google.com/recaptcha/api.js?render=6LeToIQaAAAAAJZ3xb0VYD9K8OBdJqFRGCYaxhBq",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 7 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 36,
        "urgency": "high",
        "transferBytes": 1760893,
        "estimatedRedundantBytes": 579746,
        "redundancyRatio": 0.32923408747720617,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 447502,
            "displayValue": "Est savings of 437 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 132244,
            "displayValue": "Est savings of 129 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 447502,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 132244,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 35,
        "urgency": "medium",
        "totalTransferBytes": 1760893,
        "heavyRequestCount": 6,
        "heavyBytes": 1035040,
        "heavyRatio": 0.587792671104945,
        "heavyRequests": [
          {
            "url": "https://www.gstatic.com/recaptcha/releases/gTpTIWhbKpxADzTzkcabhXN4/recaptcha__en.js",
            "transferSize": 370366,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.gstatic.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162997,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.gstatic.com/recaptcha/releases/gTpTIWhbKpxADzTzkcabhXN4/styles__ltr.css",
            "transferSize": 42608,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.gstatic.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 5,
            "transferBytes": 992432
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 42608
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622066
          },
          {
            "domain": "www.gstatic.com",
            "count": 2,
            "transferBytes": 412974
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42221,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 447502,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.gstatic.com",
            "urgency": "high",
            "estimatedSavingsBytes": 370366,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.gstatic.com/recaptcha/releases/gTpTIWhbKpxADzTzkcabhXN4/recaptcha__en.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162997,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "10.7 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 10.7 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.32,
          "displayValue": "7.0 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 7.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 437 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 437 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 129 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 129 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,800 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,800 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-rel-preconnect",
          "title": "Preconnect to required origins",
          "description": "Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).",
          "score": 0,
          "displayValue": "Est savings of 340 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Preconnect to required origins\n\n- Lighthouse audit: uses-rel-preconnect\n- Current value: Est savings of 340 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nConsider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,350 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,350 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,460 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,460 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/regional-community-planning/short-term-rentals",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/regional-community-planning/short-term-rentals",
      "performanceScore": 0.54,
      "bestPracticesScore": 0.79,
      "transferBytes": 1354990,
      "co2Grams": 0.519071466186,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622063,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 326296,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174923,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2237,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972750588&cv=11&fst=1776972750588&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning%2Fshort-term-rentals&rcb=0&frm=0&tiba=Short-Term%20Rentals%20%7C%20Permit%20%7C%20Regulations%20%7C%20Register%20%7C%20Apply%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Short-Term Rentals | Permit | Regulations | Register | Apply | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Short Term Rentals are temporary overnight accommodations rented out by property owners or tenants, typically for a few nights or weeks. Learn more about the new regulations, what is required, and how to obtain a permit.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/regional-community-planning/short-term-rentals",
          "ogTitle": "Short-Term Rentals",
          "ogDescription": "Short Term Rentals are temporary overnight accommodations rented out by property owners or tenants, typically for a few nights or weeks. Learn more about the new regulations, what is required, and how to obtain a permit.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/regional-community-planning/short-term-rentals",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 72,
          "tabletSmallTapTargets": 88,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 72,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 88,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 72 small targets on mobile and 88 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:32:41 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 145598.05,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 60564,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30326.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 59.14 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 733447.05,
        "totalEstimatedBlockingMs": 2302,
        "opportunities": [
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 274856,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 268 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270881,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2302,
            "displayValue": "Est savings of 2,300 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 60564,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 59 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30326.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 268.41 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.53 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 2302 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 59.14 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 28.65 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 665354.4000000003
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 649.76 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 649.76 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 19,
        "urgency": "high",
        "transferBytes": 1354990,
        "css": {
          "unusedBytes": 274856,
          "ratio": 0.20284725348526558,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270881,
          "duplicatedBytes": 0,
          "ratio": 0.19991365249928045,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 274856,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270881,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 26,
        "urgency": "high",
        "transferBytes": 1354990,
        "estimatedDeferrableBytes": 587849,
        "renderBlockingMs": 2302,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270881,
          "unusedCssSavings": 274856
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270881,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 274856,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2302,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162997,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 831185,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622063,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174923,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2237,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972750588&cv=11&fst=1776972750588&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning%2Fshort-term-rentals&rcb=0&frm=0&tiba=Short-Term%20Rentals%20%7C%20Permit%20%7C%20Regulations%20%7C%20Register%20%7C%20Apply%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 40,
        "urgency": "high",
        "transferBytes": 1354990,
        "estimatedRedundantBytes": 545737,
        "redundancyRatio": 0.402760905984546,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 274856,
            "displayValue": "Est savings of 268 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270881,
            "displayValue": "Est savings of 265 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 274856,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270881,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 33,
        "urgency": "medium",
        "totalTransferBytes": 1354990,
        "heavyRequestCount": 5,
        "heavyBytes": 785503,
        "heavyRatio": 0.5797112893822095,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162997,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136478,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622063
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622063
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270881,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162997,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.27,
          "displayValue": "5.0 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 5.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 268 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 268 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 30 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 2,300 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 2,300 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 870 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 870 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.7,
          "displayValue": "4.6 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 265 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,778 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,778 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home-property/garbage-recycling-green-cart/collection-schedules-what-goes-where",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home-property/garbage-recycling-green-cart/collection-schedules-what-goes-where",
      "performanceScore": 0.34,
      "bestPracticesScore": 0.75,
      "transferBytes": 2810792,
      "co2Grams": 1.0767621344688,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "api.recollect.net",
            "resourceType": "script",
            "requestCount": 7,
            "transferBytes": 754837,
            "sampleUrl": "https://api.recollect.net/api/areas/Halifax/services/waste.json?callback=svc_cb_1776972768487",
            "greenCheck": {
              "hostname": "api.recollect.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:02.657570",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/api.recollect.net",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622045,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 341319,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.pendo.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 188588,
            "sampleUrl": "https://cdn.pendo.io/agent/static/0917d9c3-59ba-4540-6ee5-f6e47e00880e/pendo.js",
            "greenCheck": {
              "hostname": "cdn.pendo.io",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:20:13",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.pendo.io",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157024,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "recollect-us.global.ssl.fastly.net",
            "resourceType": "stylesheet",
            "requestCount": 4,
            "transferBytes": 105240,
            "sampleUrl": "https://recollect-us.global.ssl.fastly.net/0.11.1776954052/api/areas/Halifax/services/waste/style/widget/logan/Default.css",
            "greenCheck": {
              "hostname": "recollect-us.global.ssl.fastly.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:01.787304",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/recollect-us.global.ssl.fastly.net",
              "error": null
            }
          },
          {
            "hostname": "assets.ca.recollect.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 41161,
            "sampleUrl": "https://assets.ca.recollect.net/0.11.1776873130/javascript/compiled/recollect-widget-loader-prod-us.js",
            "greenCheck": {
              "hostname": "assets.ca.recollect.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:02.676287",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/assets.ca.recollect.net",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "fonts.googleapis.com",
            "resourceType": "stylesheet",
            "requestCount": 2,
            "transferBytes": 5721,
            "sampleUrl": "https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;0,800;1,300;1,400;1,600;1,700;1,800",
            "greenCheck": {
              "hostname": "fonts.googleapis.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/fonts.googleapis.com",
              "error": null
            }
          },
          {
            "hostname": "cdnjs.cloudflare.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 4526,
            "sampleUrl": "https://cdnjs.cloudflare.com/ajax/libs/mapbox-gl/1.9.1/mapbox-gl.css",
            "greenCheck": {
              "hostname": "cdnjs.cloudflare.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:34",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdnjs.cloudflare.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2246,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972768751&cv=11&fst=1776972768751&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fgarbage-recycling-green-cart%2Fcollection-schedules-what-goes-where&rcb=5&frm=0&tiba=Collection%20Schedules%20%7C%20Garbage%20%7C%20Recycling%20and%20green%20cart%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "data.pendo.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 654,
            "sampleUrl": "https://data.pendo.io/data/guide.js/0917d9c3-59ba-4540-6ee5-f6e47e00880e?id=23&jzb=eJyFU_1r2zAQ_V8M8U_1R-y2oQExunWlg7Gt-yj0J3GRLrZWRdIkOW42-r_3HKfuCvsIxtadnt69ezn9SrYqqGj9O5ksE_7p7YeLj_wrv1bbH-72HtztVXKUgBC2M3EPKct59b6k3_yyPsOb6_PPBOi8pq02RheWRQFO5R6F1RpFzA3Goi9CBB9fgUdgV6DVGu5TiUE1hmnbgEkD-q0SyJVkdV2mRMFbGyL7K2f6PfwPIcIB0hmJa2VQPpVhPYSIqbc2cgcNsgirFUreK9nQQUc6TeTU1cg-q89n1SU9fd_n7Sg_F0CJ1m4wc9469HFHcQN-RXwZCdkJrUyTNR7RZIK6p-2DOmVNFkSLstMYsr6FmDV2v0KPqbYCNDIkUzrnrI98YyWyNeiAqYEN_tbP4NMd7lg6KufCmrVq2GzxelZVg9v02auvDq4PcfWG3kPb0-aL9ifICsIz5KURL4yeDsRWeUmGkhekxN4p5GhgpVGONKbTera4eBKrYWe7yJzSOqQjnk3EmdMgMEWzZeSvzLqQbtEHso6V-XyezxeL07OT4_KkovmzWt48j_FQ5ijZYAQJEZLlNOPDUv1jztd0kA8OE4TCqKI-LK2nIVU_YfjrxowG03TkIUVo-LcvycN0T6Yyf7grhBqn63zCUop0DkRVXZTHRVVWp1Tg0O2QzuuqzI_53gdlk4eHR_n5QfA&v=2.320.4_prod-io&ct=1776972770322",
            "greenCheck": {
              "hostname": "data.pendo.io",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:10:07",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/data.pendo.io",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 13,
          "greenCount": 8,
          "notGreenCount": 6,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Collection Schedules | Garbage | Recycling and green cart | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The online and mobile app allow you to sign up for collection day reminders, create a collection calendar specific to your address, and receive notifications of special events and service interruptions due to weather.",
          "robots": "",
          "canonical": "https://www.halifax.ca/home-property/garbage-recycling-green-cart/collection-schedules-what-goes-where",
          "ogTitle": "Collection Schedules and What Goes Where",
          "ogDescription": "The online and mobile app allow you to sign up for collection day reminders, create a collection calendar specific to your address, and receive notifications of special events and service interruptions due to weather.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home-property/garbage-recycling-green-cart/collection-schedules-what-goes-where",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 71,
          "tabletSmallTapTargets": 81,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 71,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 81,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 71 small targets on mobile and 81 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 50,
          "externalScriptsWithoutIntegrity": 50,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:33:06 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "50 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 12,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 12
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "12 of 12 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 24,
            "lazyImages": 0,
            "totalIframes": 1,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/24 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 14,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 387742.8,
        "checks": {
          "hasEffectiveTextCompression": false
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 266581.8,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 63533,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25459,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "uses-text-compression",
            "title": "Enable Brotli/gzip for text assets",
            "urgency": "low",
            "estimatedSavingsBytes": 7278,
            "detail": "Compress HTML, CSS, JS, JSON, SVG, and XML responses with Brotli or gzip."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.33 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 62.04 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.86 KB."
          },
          {
            "title": "Enable Brotli/gzip for text assets",
            "urgency": "low",
            "detail": "Compress HTML, CSS, JS, JSON, SVG, and XML responses with Brotli or gzip. Estimated savings: 7.11 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1504018.8,
        "totalEstimatedBlockingMs": 2399,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 490311,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 479 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 333490,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 326 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 292475,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 286 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 266581.8,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 260 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2399,
            "displayValue": "Est savings of 2,400 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 63533,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 62 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25459,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "uses-text-compression",
            "title": "Enable text compression",
            "detail": "Serve text assets with Brotli or gzip to remove avoidable transfer bloat.",
            "estimatedSavingsBytes": 7278,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 7 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-text-compression"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 478.82 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 325.67 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 285.62 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 260.33 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 2399 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 62.04 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 50,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "50 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1765268.1715083802
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.68 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.68 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 15,
        "urgency": "high",
        "transferBytes": 2810792,
        "css": {
          "unusedBytes": 333490,
          "ratio": 0.11864627478660819,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 490311,
          "duplicatedBytes": 0,
          "ratio": 0.1744387347053784,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 333490,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 490311,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 26,
        "urgency": "high",
        "transferBytes": 2810792,
        "estimatedDeferrableBytes": 1116276,
        "renderBlockingMs": 2399,
        "breakdown": {
          "offscreenImageSavings": 292475,
          "unusedJavascriptSavings": 490311,
          "unusedCssSavings": 333490
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 292475,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 490311,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 333490,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2399,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from api.recollect.net",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 342786,
            "url": "https://api.recollect.net/0.11.1776954052/javascript/compiled/recollect-widget-prod-us.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from cdn.pendo.io",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 188588,
            "url": "https://cdn.pendo.io/agent/static/0917d9c3-59ba-4540-6ee5-f6e47e00880e/pendo.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 90,
        "urgency": "high",
        "providerCount": 9,
        "requestCount": 65,
        "transferBytes": 1798517,
        "notGreenCount": 3,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "api.recollect.net",
            "resourceType": "script",
            "requestCount": 7,
            "transferBytes": 754837,
            "sampleUrl": "https://api.recollect.net/api/areas/Halifax/services/waste.json?callback=svc_cb_1776972768487",
            "greenCheck": {
              "hostname": "api.recollect.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:02.657570",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/api.recollect.net",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622045,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.pendo.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 188588,
            "sampleUrl": "https://cdn.pendo.io/agent/static/0917d9c3-59ba-4540-6ee5-f6e47e00880e/pendo.js",
            "greenCheck": {
              "hostname": "cdn.pendo.io",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:20:13",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.pendo.io",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157024,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "assets.ca.recollect.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 41161,
            "sampleUrl": "https://assets.ca.recollect.net/0.11.1776873130/javascript/compiled/recollect-widget-loader-prod-us.js",
            "greenCheck": {
              "hostname": "assets.ca.recollect.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:02.676287",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/assets.ca.recollect.net",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2246,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972768751&cv=11&fst=1776972768751&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fgarbage-recycling-green-cart%2Fcollection-schedules-what-goes-where&rcb=5&frm=0&tiba=Collection%20Schedules%20%7C%20Garbage%20%7C%20Recycling%20and%20green%20cart%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "data.pendo.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 654,
            "sampleUrl": "https://data.pendo.io/data/guide.js/0917d9c3-59ba-4540-6ee5-f6e47e00880e?id=23&jzb=eJyFU_1r2zAQ_V8M8U_1R-y2oQExunWlg7Gt-yj0J3GRLrZWRdIkOW42-r_3HKfuCvsIxtadnt69ezn9SrYqqGj9O5ksE_7p7YeLj_wrv1bbH-72HtztVXKUgBC2M3EPKct59b6k3_yyPsOb6_PPBOi8pq02RheWRQFO5R6F1RpFzA3Goi9CBB9fgUdgV6DVGu5TiUE1hmnbgEkD-q0SyJVkdV2mRMFbGyL7K2f6PfwPIcIB0hmJa2VQPpVhPYSIqbc2cgcNsgirFUreK9nQQUc6TeTU1cg-q89n1SU9fd_n7Sg_F0CJ1m4wc9469HFHcQN-RXwZCdkJrUyTNR7RZIK6p-2DOmVNFkSLstMYsr6FmDV2v0KPqbYCNDIkUzrnrI98YyWyNeiAqYEN_tbP4NMd7lg6KufCmrVq2GzxelZVg9v02auvDq4PcfWG3kPb0-aL9ifICsIz5KURL4yeDsRWeUmGkhekxN4p5GhgpVGONKbTera4eBKrYWe7yJzSOqQjnk3EmdMgMEWzZeSvzLqQbtEHso6V-XyezxeL07OT4_KkovmzWt48j_FQ5ijZYAQJEZLlNOPDUv1jztd0kA8OE4TCqKI-LK2nIVU_YfjrxowG03TkIUVo-LcvycN0T6Yyf7grhBqn63zCUop0DkRVXZTHRVVWp1Tg0O2QzuuqzI_53gdlk4eHR_n5QfA&v=2.320.4_prod-io&ct=1776972770322",
            "greenCheck": {
              "hostname": "data.pendo.io",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:10:07",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/data.pendo.io",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 9 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "3 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 44,
        "urgency": "high",
        "transferBytes": 2810792,
        "estimatedRedundantBytes": 823801,
        "redundancyRatio": 0.2930850094919866,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 490311,
            "displayValue": "Est savings of 479 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 333490,
            "displayValue": "Est savings of 326 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 490311,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 333490,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Enable and verify text compression",
            "urgency": "medium",
            "estimatedSavingsBytes": 7278,
            "auditId": "uses-text-compression",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 44,
        "urgency": "high",
        "totalTransferBytes": 2810792,
        "heavyRequestCount": 11,
        "heavyBytes": 2006187,
        "heavyRatio": 0.7137443823662513,
        "heavyRequests": [
          {
            "url": "https://api.recollect.net/0.11.1776954052/javascript/compiled/recollect-widget-prod-us.js",
            "transferSize": 342786,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "api.recollect.net"
          },
          {
            "url": "https://api.recollect.net/0.11.1776954052/javascript/compiled/recollect-widget-prod-us.js",
            "transferSize": 342777,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "api.recollect.net"
          },
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://cdn.pendo.io/agent/static/0917d9c3-59ba-4540-6ee5-f6e47e00880e/pendo.js",
            "transferSize": 188588,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "cdn.pendo.io"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163476,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162993,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
            "transferSize": 162219,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
            "transferSize": 160346,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
            "transferSize": 136487,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://recollect-us.global.ssl.fastly.net/0.11.1776954052/api/areas/Halifax/services/waste/style/widget/logan/Default.css",
            "transferSize": 49381,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "recollect-us.global.ssl.fastly.net"
          },
          {
            "url": "https://recollect-us.global.ssl.fastly.net/0.11.1776954052/api/areas/Halifax/services/waste/style/widget/logan/Default.css",
            "transferSize": 49379,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "recollect-us.global.ssl.fastly.net"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 7,
            "transferBytes": 1496196
          },
          {
            "resourceType": "stylesheet",
            "count": 3,
            "transferBytes": 262236
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "api.recollect.net",
            "count": 2,
            "transferBytes": 685563
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622045
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "domain": "cdn.pendo.io",
            "count": 1,
            "transferBytes": 188588
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163476
          },
          {
            "domain": "recollect-us.global.ssl.fastly.net",
            "count": 2,
            "transferBytes": 98760
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 292475,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 490311,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from api.recollect.net",
            "urgency": "high",
            "estimatedSavingsBytes": 342786,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://api.recollect.net/0.11.1776954052/javascript/compiled/recollect-widget-prod-us.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.06,
          "displayValue": "7.0 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 7.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.48,
          "displayValue": "5.9 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 479 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 479 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 326 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 326 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 2,400 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 2,400 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 260 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 260 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 286 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 286 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-text-compression",
          "title": "Enable text compression",
          "description": "Text-based resources should be served with compression (gzip, deflate or brotli) to minimize total network bytes. [Learn more about text compression](https://developer.chrome.com/docs/lighthouse/performance/uses-text-compression/).",
          "score": 0.5,
          "displayValue": "Est savings of 7 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Enable text compression\n\n- Lighthouse audit: uses-text-compression\n- Current value: Est savings of 7 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nText-based resources should be served with compression (gzip, deflate or brotli) to minimize total network bytes. [Learn more about text compression](https://developer.chrome.com/docs/lighthouse/performance/uses-text-compression/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 2,745 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 2,745 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,451 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,451 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/transportation",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/transportation",
      "performanceScore": 0.54,
      "bestPracticesScore": 0.79,
      "transferBytes": 1748126,
      "co2Grams": 0.6696745554564001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622062,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 69,
            "transferBytes": 313037,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173496,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2167,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972794448&cv=11&fst=1776972794448&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation&rcb=0&frm=0&tiba=Transportation%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Transportation | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Get around using Halifax Transit, walking, driving, or cycling. Find out about streets, sidewalks, winter operations, senior snow removal program.",
          "robots": "",
          "canonical": "https://www.halifax.ca/transportation",
          "ogTitle": "Transportation",
          "ogDescription": "Get around using Halifax Transit, walking, driving, or cycling. Find out about streets, sidewalks, winter operations, senior snow removal program.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/transportation",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 72,
          "tabletSmallTapTargets": 73,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 72,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 73,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 72 small targets on mobile and 73 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:33:29 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 15,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 15
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "15 of 15 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 15,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/15 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 28,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 489126.6,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 308804.6,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 98140,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 57771,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24411,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 301.57 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 95.84 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 56.42 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 23.84 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1062135.6,
        "totalEstimatedBlockingMs": 1619,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 308804.6,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 302 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269181,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 263 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 261720,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 256 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1619,
            "displayValue": "Est savings of 1,620 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 98140,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 96 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 57771,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 56 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42108,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24411,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 301.57 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 262.87 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 255.59 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1619 ms."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 95.84 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 56.42 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1063436.174999999
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.01 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.01 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 15,
        "urgency": "high",
        "transferBytes": 1748126,
        "css": {
          "unusedBytes": 261720,
          "ratio": 0.14971460867237257,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269181,
          "duplicatedBytes": 0,
          "ratio": 0.15398260766100383,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 261720,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269181,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 23,
        "urgency": "high",
        "transferBytes": 1748126,
        "estimatedDeferrableBytes": 573009,
        "renderBlockingMs": 1619,
        "breakdown": {
          "offscreenImageSavings": 42108,
          "unusedJavascriptSavings": 269181,
          "unusedCssSavings": 261720
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42108,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269181,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 261720,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1619,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 196113,
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/transit_v2-jpg.jpg?itok=_iBFocAj",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163439,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 829687,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622062,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173496,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2167,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972794448&cv=11&fst=1776972794448&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation&rcb=0&frm=0&tiba=Transportation%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 34,
        "urgency": "high",
        "transferBytes": 1748126,
        "estimatedRedundantBytes": 530901,
        "redundancyRatio": 0.30369721633337643,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269181,
            "displayValue": "Est savings of 263 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 261720,
            "displayValue": "Est savings of 256 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269181,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 261720,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 32,
        "urgency": "medium",
        "totalTransferBytes": 1748126,
        "heavyRequestCount": 6,
        "heavyBytes": 981614,
        "heavyRatio": 0.5615235972693043,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/transit_v2-jpg.jpg?itok=_iBFocAj",
            "transferSize": 196113,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163439,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162231,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622062
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 196113
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163439
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622062
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 2,
            "transferBytes": 359552
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42108,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269181,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 196113,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/transit_v2-jpg.jpg?itok=_iBFocAj",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163439,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "10.1 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 10.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 263 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 263 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 256 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 256 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 302 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 302 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 96 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 96 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,620 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,620 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.81,
          "displayValue": "4.0 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,307 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,307 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/transportation/halifax-transit",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/transportation/halifax-transit",
      "performanceScore": 0.53,
      "bestPracticesScore": 0.75,
      "transferBytes": 1668477,
      "co2Grams": 0.6391625050278,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 402922,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 76,
            "transferBytes": 214696,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2216,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972816389&cv=11&fst=1776972816389&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~117384406&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fhalifax-transit&rcb=11&frm=0&tiba=Halifax%20Transit%20%7C%20Bus%20%7C%20Schedules%20%7C%20Routes%20%7C%20Ferries%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Halifax Transit | Bus | Schedules | Routes | Ferries | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax Transit, bus and ferry services. Contains schedules, route maps, and fares.",
          "robots": "",
          "canonical": "https://www.halifax.ca/transportation/halifax-transit",
          "ogTitle": "Halifax Transit",
          "ogDescription": "Halifax Transit, bus and ferry services. Contains schedules, route maps, and fares.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/transportation/halifax-transit",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 79,
          "tabletSmallTapTargets": 87,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 79,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 87,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 79 small targets on mobile and 87 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:33:49 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 26,
        "urgency": "low",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 15,
          "imagesWithLazy": 6,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 15 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 15,
            "lazyImages": 6,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 6/15 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 21,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 344239.45,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "estimatedSavingsBytes": 115895,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 139736.45,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 50625,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 37983,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 113.18 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 136.46 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 49.44 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 37.09 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1069300.45,
        "totalEstimatedBlockingMs": 1181,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 398296,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 389 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 167531,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 164 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 115895,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 113 KiB",
            "urgency": "high",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1181,
            "displayValue": "Est savings of 1,180 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 139736.45,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 136 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 99162,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 97 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 60072,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 59 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 37983,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 37 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 50625,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 49 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 388.96 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 163.60 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "high",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 113.18 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1181 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 136.46 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 96.84 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 915264.4416666671
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 893.81 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 893.81 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1668477,
        "css": {
          "unusedBytes": 167531,
          "ratio": 0.10040953516290606,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 398296,
          "duplicatedBytes": 0,
          "ratio": 0.23871830417800186,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 167531,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 398296,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 23,
        "urgency": "high",
        "transferBytes": 1668477,
        "estimatedDeferrableBytes": 664989,
        "renderBlockingMs": 1181,
        "breakdown": {
          "offscreenImageSavings": 99162,
          "unusedJavascriptSavings": 398296,
          "unusedCssSavings": 167531
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 99162,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 398296,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 167531,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1181,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from cdn.halifax.ca",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 246034,
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 1059167,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 402922,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11119,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2216,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972816389&cv=11&fst=1776972816389&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~117384406&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fhalifax-transit&rcb=11&frm=0&tiba=Halifax%20Transit%20%7C%20Bus%20%7C%20Schedules%20%7C%20Routes%20%7C%20Ferries%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 39,
        "urgency": "high",
        "transferBytes": 1668477,
        "estimatedRedundantBytes": 565827,
        "redundancyRatio": 0.3391278393409079,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 398296,
            "displayValue": "Est savings of 389 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 167531,
            "displayValue": "Est savings of 164 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 398296,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 167531,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 32,
        "urgency": "medium",
        "totalTransferBytes": 1668477,
        "heavyRequestCount": 5,
        "heavyBytes": 868101,
        "heavyRatio": 0.5202954550766957,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "transferSize": 246034,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 5,
            "transferBytes": 868101
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622067
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 246034
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 99162,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 398296,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 246034,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.2,
          "displayValue": "5.4 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 5.4 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 389 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 389 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 164 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 164 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,180 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,180 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.7,
          "displayValue": "4.6 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 136 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 136 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 49 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 49 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 97 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 97 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,612 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,612 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/transportation/cycling-walking",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/transportation/cycling-walking",
      "performanceScore": 0.48,
      "bestPracticesScore": 0.79,
      "transferBytes": 1397613,
      "co2Grams": 0.5353995446982002,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 157783,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 149430,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11113,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2227,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972837946&cv=11&fst=1776972837946&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938466~115938468~117266400~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fcycling-walking&rcb=6&frm=0&tiba=Cycling%20%7C%20Walking%20%7C%20Pedestrian%20Safety%20%7C%20Bike%20Week%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Cycling | Walking | Pedestrian Safety | Bike Week | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Cycling & walking",
          "robots": "",
          "canonical": "https://www.halifax.ca/transportation/cycling-walking",
          "ogTitle": "Cycling & Walking",
          "ogDescription": "Cycling & walking",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/transportation/cycling-walking",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 69,
          "tabletSmallTapTargets": 76,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 69,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 69 small targets on mobile and 76 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:34:11 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 34,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 11,
          "imagesWithLazy": 3,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 11 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 11,
            "lazyImages": 3,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 3/11 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 35,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 485557.85,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 245124.84999999998,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "estimatedSavingsBytes": 192057,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 23485,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 239.38 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 187.56 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.93 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 902152.85,
        "totalEstimatedBlockingMs": 723,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270755,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 245124.84999999998,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 239 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 192057,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 188 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 103624,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 101 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42216,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 23485,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 23 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 723,
            "displayValue": "Est savings of 720 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.41 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 239.38 KB."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 187.56 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 101.20 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.23 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 714638.25
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 697.89 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 697.89 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 14,
        "urgency": "high",
        "transferBytes": 1397613,
        "css": {
          "unusedBytes": 103624,
          "ratio": 0.07414355762288989,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270755,
          "duplicatedBytes": 0,
          "ratio": 0.19372673265059784,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 103624,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270755,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1397613,
        "estimatedDeferrableBytes": 416595,
        "renderBlockingMs": 723,
        "breakdown": {
          "offscreenImageSavings": 42216,
          "unusedJavascriptSavings": 270755,
          "unusedCssSavings": 103624
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42216,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270755,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 103624,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 723,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 199211,
            "url": "https://cdn.halifax.ca/sites/default/files/styles/topic_image_lure/public/2021-09/Allan-Oak-Oxford3.jpg?itok=CaS_6-5c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 814033,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 157783,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11113,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2227,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972837946&cv=11&fst=1776972837946&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938466~115938468~117266400~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fcycling-walking&rcb=6&frm=0&tiba=Cycling%20%7C%20Walking%20%7C%20Pedestrian%20Safety%20%7C%20Bike%20Week%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 35,
        "urgency": "medium",
        "transferBytes": 1397613,
        "estimatedRedundantBytes": 374379,
        "redundancyRatio": 0.26787029027348774,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270755,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 103624,
            "displayValue": "Est savings of 101 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270755,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 103624,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 33,
        "urgency": "medium",
        "totalTransferBytes": 1397613,
        "heavyRequestCount": 5,
        "heavyBytes": 821278,
        "heavyRatio": 0.5876290503880545,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/styles/topic_image_lure/public/2021-09/Allan-Oak-Oxford3.jpg?itok=CaS_6-5c",
            "transferSize": 199211,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622067
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 199211
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622067
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 199211
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42216,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270755,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 199211,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/styles/topic_image_lure/public/2021-09/Allan-Oak-Oxford3.jpg?itok=CaS_6-5c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "11.3 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 11.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 101 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 101 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 239 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 239 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 720 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 720 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 960 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 960 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.51,
          "displayValue": "5.7 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.7 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 188 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 188 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,275 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,275 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/transportation/parking",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/transportation/parking",
      "performanceScore": 0.52,
      "bestPracticesScore": 0.79,
      "transferBytes": 1135120,
      "co2Grams": 0.43484335876800007,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156838,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 147720,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11065,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2225,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972858284&cv=11&fst=1776972858284&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400~118167060~118463261&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fparking&rcb=8&frm=0&tiba=Parking%20%7C%20Pay%20Stations%20%7C%20Street%20Parking%20%7C%20Permits%20%7C%20Tickets%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Parking | Pay Stations | Street Parking | Permits | Tickets | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Parking, pay stations, street parking, permits and tickets.",
          "robots": "",
          "canonical": "https://www.halifax.ca/transportation/parking",
          "ogTitle": "Parking",
          "ogDescription": "Parking, pay stations, street parking, permits and tickets.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/transportation/parking",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 69,
          "tabletSmallTapTargets": 75,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 69,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 75,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 69 small targets on mobile and 75 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:34:29 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 126371.70000000001,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 52676.700000000004,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 23431,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25373,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 51.44 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.88 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 543008.7,
        "totalEstimatedBlockingMs": 1025,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270978,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1025,
            "displayValue": "Est savings of 1,030 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 103548,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 101 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 52676.700000000004,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 51 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42111,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 23431,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 23 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25373,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.63 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1025 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 101.12 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 51.44 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.12 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 455682.3499999999
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 445.00 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 445.00 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1135120,
        "css": {
          "unusedBytes": 103548,
          "ratio": 0.09122207343716963,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270978,
          "duplicatedBytes": 0,
          "ratio": 0.2387218972443442,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 103548,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270978,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 1135120,
        "estimatedDeferrableBytes": 416637,
        "renderBlockingMs": 1025,
        "breakdown": {
          "offscreenImageSavings": 42111,
          "unusedJavascriptSavings": 270978,
          "unusedCssSavings": 103548
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42111,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270978,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 103548,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1025,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 813038,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156838,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20843,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11065,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2225,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972858284&cv=11&fst=1776972858284&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400~118167060~118463261&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fparking&rcb=8&frm=0&tiba=Parking%20%7C%20Pay%20Stations%20%7C%20Street%20Parking%20%7C%20Permits%20%7C%20Tickets%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 38,
        "urgency": "medium",
        "transferBytes": 1135120,
        "estimatedRedundantBytes": 374526,
        "redundancyRatio": 0.3299439706815139,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270978,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 103548,
            "displayValue": "Est savings of 101 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270978,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 103548,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 31,
        "urgency": "medium",
        "totalTransferBytes": 1135120,
        "heavyRequestCount": 4,
        "heavyBytes": 622067,
        "heavyRatio": 0.5480187116780605,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622067
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622067
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42111,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270978,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "9.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 9.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 265 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 101 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 101 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 51 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 51 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,030 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,030 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.89,
          "displayValue": "3.4 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.4 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,210 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,210 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/transportation/winter-operations",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/transportation/winter-operations",
      "performanceScore": 0.51,
      "bestPracticesScore": 0.79,
      "transferBytes": 1209543,
      "co2Grams": 0.46335342580020006,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622064,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 75,
            "transferBytes": 201178,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156888,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20844,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11063,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2231,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972876421&cv=11&fst=1776972876421&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401~117384406~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fwinter-operations&rcb=2&frm=0&tiba=Winter%20Operations%20%7C%20Parking%20Ban%20%7C%20Safety%20Tips%20%7C%20Weather%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Winter Operations | Parking Ban | Safety Tips | Weather | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The municipality's Winter Operations program. Information including: Overnight winter parking ban, ongoing service updates during weather events, winter safety tips and answers to commonly asked questions.",
          "robots": "",
          "canonical": "https://www.halifax.ca/transportation/winter-operations",
          "ogTitle": "Winter Operations",
          "ogDescription": "The municipality's Winter Operations program. Information including: Overnight winter parking ban, ongoing service updates during weather events, winter safety tips and answers to commonly asked questions.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/transportation/winter-operations",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 77,
          "tabletSmallTapTargets": 85,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 77,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 85,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 77 small targets on mobile and 85 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:34:50 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 43,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 9,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 9 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 9,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/9 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 12,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 144198.8,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 54520.799999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 35043,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 29744,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 53.24 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.22 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 29.05 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 611949.8,
        "totalEstimatedBlockingMs": 1839,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270936,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 154699,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 151 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1839,
            "displayValue": "Est savings of 1,840 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 54520.799999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 53 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42116,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 35043,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 34 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 29744,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.59 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 151.07 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1839 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 53.24 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 34.22 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 528442.675
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 516.06 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 516.06 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1209543,
        "css": {
          "unusedBytes": 154699,
          "ratio": 0.12789871877229664,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270936,
          "duplicatedBytes": 0,
          "ratio": 0.22399865073006914,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 154699,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270936,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 25,
        "urgency": "high",
        "transferBytes": 1209543,
        "estimatedDeferrableBytes": 467751,
        "renderBlockingMs": 1839,
        "breakdown": {
          "offscreenImageSavings": 42116,
          "unusedJavascriptSavings": 270936,
          "unusedCssSavings": 154699
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270936,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 154699,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1839,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162995,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 813090,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622064,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156888,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20844,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11063,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2231,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972876421&cv=11&fst=1776972876421&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401~117384406~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fwinter-operations&rcb=2&frm=0&tiba=Winter%20Operations%20%7C%20Parking%20Ban%20%7C%20Safety%20Tips%20%7C%20Weather%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 37,
        "urgency": "medium",
        "transferBytes": 1209543,
        "estimatedRedundantBytes": 425635,
        "redundancyRatio": 0.3518973695023658,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270936,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 154699,
            "displayValue": "Est savings of 151 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270936,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 154699,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1209543,
        "heavyRequestCount": 4,
        "heavyBytes": 622064,
        "heavyRatio": 0.5142967219850804,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162995,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622064
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622064
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270936,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162995,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.01,
          "displayValue": "9.0 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 9.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 265 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 151 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 151 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 53 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 53 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,840 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,840 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 800 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 800 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.83,
          "displayValue": "3.8 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 29 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 29 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,267 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,267 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/transportation/your-trip",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/transportation/your-trip",
      "performanceScore": 0.42,
      "bestPracticesScore": 0.79,
      "transferBytes": 2943282,
      "co2Grams": 1.1275165891548,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 7,
            "transferBytes": 1454145,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 5,
            "transferBytes": 622090,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 73,
            "transferBytes": 161862,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156881,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "stylesheet",
            "requestCount": 4,
            "transferBytes": 105995,
            "sampleUrl": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 23736,
            "sampleUrl": "https://www.google.com/js/th/tFlgh3vcjwdXGn3emHniF-gR5D1hxoaFKd3DGQF7sI0.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20846,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2197,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972897483&cv=11&fst=1776972897483&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fyour-trip&rcb=10&frm=0&tiba=Your%20Trip%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 0,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 9,
          "greenCount": 7,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Your Trip | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "As a resident or visitor, you have options for how you get where you need to go. Learn more about walking, rolling, cycling, transit, and driving in Halifax.",
          "robots": "",
          "canonical": "https://www.halifax.ca/transportation/your-trip",
          "ogTitle": "Your Trip",
          "ogDescription": "As a resident or visitor, you have options for how you get where you need to go. Learn more about walking, rolling, cycling, transit, and driving in Halifax.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/transportation/your-trip",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 73,
          "tabletSmallTapTargets": 76,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 73,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 73 small targets on mobile and 76 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 54,
          "externalScriptsWithoutIntegrity": 54,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:35:11 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "54 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 43,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 9,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 9 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 9,
            "lazyImages": 1,
            "totalIframes": 2,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/9 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 5,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 137554.55,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 60939.549999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26348,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25376,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 59.51 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.73 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 562413.55,
        "totalEstimatedBlockingMs": 726,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 266385,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 260 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 116360,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 114 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 60939.549999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 60 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42114,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26348,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 726,
            "displayValue": "Est savings of 730 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25376,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 260.14 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 113.63 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 59.51 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 25.73 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 54,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "54 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 501087.19166666677
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 489.34 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 489.34 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 8,
        "urgency": "high",
        "transferBytes": 2943282,
        "css": {
          "unusedBytes": 116360,
          "ratio": 0.039534098329687746,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 266385,
          "duplicatedBytes": 0,
          "ratio": 0.09050610848705629,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 116360,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 266385,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 11,
        "urgency": "high",
        "transferBytes": 2943282,
        "estimatedDeferrableBytes": 424859,
        "renderBlockingMs": 726,
        "breakdown": {
          "offscreenImageSavings": 42114,
          "unusedJavascriptSavings": 266385,
          "unusedCssSavings": 116360
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42114,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 266385,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 116360,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 726,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.youtube.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 483672,
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 7,
        "requestCount": 62,
        "transferBytes": 2279895,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 7,
            "transferBytes": 1454145,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 5,
            "transferBytes": 622090,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156881,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 23736,
            "sampleUrl": "https://www.google.com/js/th/tFlgh3vcjwdXGn3emHniF-gR5D1hxoaFKd3DGQF7sI0.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20846,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2197,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972897483&cv=11&fst=1776972897483&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401~118463262&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fyour-trip&rcb=10&frm=0&tiba=Your%20Trip%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 0,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 7 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 22,
        "urgency": "medium",
        "transferBytes": 2943282,
        "estimatedRedundantBytes": 382745,
        "redundancyRatio": 0.13004020681674403,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 266385,
            "displayValue": "Est savings of 260 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 116360,
            "displayValue": "Est savings of 114 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 266385,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 116360,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 42,
        "urgency": "high",
        "totalTransferBytes": 2943282,
        "heavyRequestCount": 11,
        "heavyBytes": 2171143,
        "heavyRatio": 0.737660543570069,
        "heavyRequests": [
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "transferSize": 483672,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed_es6.vflset/en_US/base.js",
            "transferSize": 446724,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/exm=base,root/ed=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=r78Drb",
            "transferSize": 208614,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=root,base",
            "transferSize": 160558,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "transferSize": 143513,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "transferSize": 59152,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/ss/k=ytembeds.base.oRmnRxCtskc.L.W.O/am=AAAABA/d=0/br=1/rs=AGKMywHkqPKx19LNLTFOD88ZyDOWYDGFJw",
            "transferSize": 46843,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 9,
            "transferBytes": 2065148
          },
          {
            "resourceType": "stylesheet",
            "count": 2,
            "transferBytes": 105995
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.youtube.com",
            "count": 7,
            "transferBytes": 1549076
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622067
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42114,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 266385,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.youtube.com",
            "urgency": "high",
            "estimatedSavingsBytes": 483672,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "13.3 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 13.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 260 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 260 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 114 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 114 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 60 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 60 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 730 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 730 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 700 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 700 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.7,
          "displayValue": "4.6 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 2,874 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 2,874 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,220 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,220 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/transportation/streets-sidewalks",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/transportation/streets-sidewalks",
      "performanceScore": 0.3,
      "bestPracticesScore": 0.79,
      "transferBytes": 1178733,
      "co2Grams": 0.4515506878662,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622053,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 189414,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 157027,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20852,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11091,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2211,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972919617&cv=11&fst=1776972919617&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fstreets-sidewalks&rcb=14&frm=0&tiba=Streets%20%7C%20Sidewalks%20%7C%20Road%20Maintenance%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Streets | Sidewalks | Road Maintenance | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Streets & Sidewalks in the Halifax area",
          "robots": "",
          "canonical": "https://www.halifax.ca/transportation/streets-sidewalks",
          "ogTitle": "Streets & Sidewalks",
          "ogDescription": "Streets & Sidewalks in the Halifax area",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/transportation/streets-sidewalks",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 70,
          "tabletSmallTapTargets": 80,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 70,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 80,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 70 small targets on mobile and 80 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:35:32 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 124615.45000000001,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 32212,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 42056.450000000004,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25456,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.46 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 41.07 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.86 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 579722.45,
        "totalEstimatedBlockingMs": 1031,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270757,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 142147,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 139 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1031,
            "displayValue": "Est savings of 1,030 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42203,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 32212,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 31 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 42056.450000000004,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25456,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.41 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 138.82 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1031 ms."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.21 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 31.46 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 497750.6416666665
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 486.08 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 486.08 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1178733,
        "css": {
          "unusedBytes": 142147,
          "ratio": 0.12059304354760578,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270757,
          "duplicatedBytes": 0,
          "ratio": 0.22970172210330922,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 142147,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270757,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 1178733,
        "estimatedDeferrableBytes": 455107,
        "renderBlockingMs": 1031,
        "breakdown": {
          "offscreenImageSavings": 42203,
          "unusedJavascriptSavings": 270757,
          "unusedCssSavings": 142147
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42203,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270757,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 142147,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1031,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162993,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 813234,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622053,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 157027,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20852,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11091,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2211,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972919617&cv=11&fst=1776972919617&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fstreets-sidewalks&rcb=14&frm=0&tiba=Streets%20%7C%20Sidewalks%20%7C%20Road%20Maintenance%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 39,
        "urgency": "medium",
        "transferBytes": 1178733,
        "estimatedRedundantBytes": 412904,
        "redundancyRatio": 0.350294765650915,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270757,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 142147,
            "displayValue": "Est savings of 139 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270757,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 142147,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1178733,
        "heavyRequestCount": 4,
        "heavyBytes": 622053,
        "heavyRatio": 0.5277301984418863,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162993,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
            "transferSize": 162220,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
            "transferSize": 160347,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
            "transferSize": 136493,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622053
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622053
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42203,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270757,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162993,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "11.9 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 11.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 139 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 139 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 41 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,030 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,030 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.62,
          "displayValue": "5.1 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,268 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,268 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/transportation/halifax-transit/routes-schedules",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/transportation/halifax-transit/routes-schedules",
      "performanceScore": 0.63,
      "bestPracticesScore": 0.75,
      "transferBytes": 1123205,
      "co2Grams": 0.43027894388700005,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622062,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157445,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 148300,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20857,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2209,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972941303&cv=11&fst=1776972941303&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fhalifax-transit%2Froutes-schedules&rcb=5&frm=0&tiba=Routes%20%7C%20Schedules%20%7C%20Halifax%20Transit%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Routes | Schedules | Halifax Transit | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax Transit's bus route information and schedules.",
          "robots": "",
          "canonical": "https://www.halifax.ca/transportation/halifax-transit/routes-schedules",
          "ogTitle": "Routes & Schedules",
          "ogDescription": "Halifax Transit's bus route information and schedules.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/transportation/halifax-transit/routes-schedules",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 220,
          "tabletSmallTapTargets": 212,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 220,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 212,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 220 small targets on mobile and 212 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:35:56 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 46,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 16,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 15
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "15 of 16 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 16,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/16 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 10,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 113678.79999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 23434,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 39979.799999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.88 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 39.04 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 530060.8,
        "totalEstimatedBlockingMs": 1579,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270707,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1579,
            "displayValue": "Est savings of 1,580 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 103563,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 101 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 23434,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 23 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 39979.799999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 39 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.36 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1579 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 101.14 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 22.88 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 431977.60000000015
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 421.85 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 421.85 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1123205,
        "css": {
          "unusedBytes": 103563,
          "ratio": 0.09220311519268522,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270707,
          "duplicatedBytes": 0,
          "ratio": 0.24101299406608767,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 103563,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270707,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 25,
        "urgency": "high",
        "transferBytes": 1123205,
        "estimatedDeferrableBytes": 416382,
        "renderBlockingMs": 1579,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270707,
          "unusedCssSavings": 103563
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270707,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 103563,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1579,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 813665,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622062,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157445,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20857,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2209,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972941303&cv=11&fst=1776972941303&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fhalifax-transit%2Froutes-schedules&rcb=5&frm=0&tiba=Routes%20%7C%20Schedules%20%7C%20Halifax%20Transit%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 38,
        "urgency": "medium",
        "transferBytes": 1123205,
        "estimatedRedundantBytes": 374270,
        "redundancyRatio": 0.3332161092587729,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270707,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 103563,
            "displayValue": "Est savings of 101 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270707,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 103563,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 32,
        "urgency": "medium",
        "totalTransferBytes": 1123205,
        "heavyRequestCount": 4,
        "heavyBytes": 622062,
        "heavyRatio": 0.5538276628042076,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160347,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622062
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622062
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270707,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.41,
          "displayValue": "4.3 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 101 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 101 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,580 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,580 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 39 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 39 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "3,095 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 3,095 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/regional-community-planning/construction-projects/cogswell-district-redevelopment-0",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/regional-community-planning/construction-projects/cogswell-district-redevelopment-0",
      "performanceScore": 0.45,
      "bestPracticesScore": 0.79,
      "transferBytes": 2720387,
      "co2Grams": 1.0421296605018002,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 12,
            "transferBytes": 863974,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 73,
            "transferBytes": 340343,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174921,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "stylesheet",
            "requestCount": 8,
            "transferBytes": 106019,
            "sampleUrl": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 23611,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20857,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2261,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972966228&cv=11&fst=1776972966228&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938468~117266401~118128923~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning%2Fconstruction-projects%2Fcogswell-district-redevelopment-0&rcb=13&frm=0&tiba=Cogswell%20District%20%7C%20Cogswell%20Interchange%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 496,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 9,
          "greenCount": 7,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Cogswell District | Cogswell Interchange | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Vision for the Cogswell District project and virtual tour",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/regional-community-planning/construction-projects/cogswell-district-redevelopment-0",
          "ogTitle": "Cogswell District Project Overview",
          "ogDescription": "Vision for the Cogswell District project and virtual tour",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/regional-community-planning/construction-projects/cogswell-district-redevelopment-0",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 69,
          "tabletSmallTapTargets": 88,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 69,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 88,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 69 small targets on mobile and 88 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 55,
          "externalScriptsWithoutIntegrity": 55,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:36:21 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "55 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 9,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 9 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 9,
            "lazyImages": 0,
            "totalIframes": 2,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/9 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 7,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 179015.75,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 63482,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 53396.74999999999,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 32803,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 61.99 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 52.15 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 32.03 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 778786.75,
        "totalEstimatedBlockingMs": 1618,
        "opportunities": [
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 287810,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 281 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269851,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1618,
            "displayValue": "Est savings of 1,620 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 63482,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 62 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 53396.74999999999,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 52 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42110,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 32803,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 32 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 281.06 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.53 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1618 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 61.99 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 52.15 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.12 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 55,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "55 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 743833.766666667
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 726.40 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 726.40 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 11,
        "urgency": "high",
        "transferBytes": 2720387,
        "css": {
          "unusedBytes": 287810,
          "ratio": 0.10579744720144597,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269851,
          "duplicatedBytes": 0,
          "ratio": 0.09919581294867237,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 287810,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269851,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 2720387,
        "estimatedDeferrableBytes": 599771,
        "renderBlockingMs": 1618,
        "breakdown": {
          "offscreenImageSavings": 42110,
          "unusedJavascriptSavings": 269851,
          "unusedCssSavings": 287810
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42110,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269851,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 287810,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1618,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.youtube.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 483684,
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 7,
        "requestCount": 69,
        "transferBytes": 1708187,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 12,
            "transferBytes": 863974,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174921,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 23611,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20857,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2261,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972966228&cv=11&fst=1776972966228&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938468~117266401~118128923~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning%2Fconstruction-projects%2Fcogswell-district-redevelopment-0&rcb=13&frm=0&tiba=Cogswell%20District%20%7C%20Cogswell%20Interchange%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 496,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 7 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 31,
        "urgency": "high",
        "transferBytes": 2720387,
        "estimatedRedundantBytes": 557661,
        "redundancyRatio": 0.20499326015011834,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 287810,
            "displayValue": "Est savings of 281 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269851,
            "displayValue": "Est savings of 264 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 287810,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269851,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 38,
        "urgency": "high",
        "totalTransferBytes": 2720387,
        "heavyRequestCount": 10,
        "heavyBytes": 1744408,
        "heavyRatio": 0.6412352360160521,
        "heavyRequests": [
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "transferSize": 483684,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/exm=base,root/ed=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=r78Drb",
            "transferSize": 208627,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=root,base",
            "transferSize": 160571,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "transferSize": 59163,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/ss/k=ytembeds.base.oRmnRxCtskc.L.W.O/am=AAAABA/d=0/br=1/rs=AGKMywHkqPKx19LNLTFOD88ZyDOWYDGFJw",
            "transferSize": 46856,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 7,
            "transferBytes": 1474949
          },
          {
            "resourceType": "stylesheet",
            "count": 3,
            "transferBytes": 269459
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.youtube.com",
            "count": 5,
            "transferBytes": 958901
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622067
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42110,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269851,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.youtube.com",
            "urgency": "high",
            "estimatedSavingsBytes": 483684,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.11,
          "displayValue": "6.3 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 6.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.24,
          "displayValue": "7.7 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 7.7 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 281 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 281 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 52 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 52 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,620 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,620 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,460 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,460 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 32 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 32 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,570 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,570 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/transportation/parking/parking-tickets",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/transportation/parking/parking-tickets",
      "performanceScore": 0.4,
      "bestPracticesScore": 0.79,
      "transferBytes": 1548393,
      "co2Grams": 0.5931605581902,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 164232,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158342,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20857,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2224,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972990314&cv=11&fst=1776972990314&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fparking%2Fparking-tickets&rcb=7&frm=0&tiba=How%20to%20pay%20%7C%20Parking%20Tickets%20%7C%20Dispute%20%7C%20Payment%20options%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "How to pay | Parking Tickets | Dispute | Payment options | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Learn more about how to pay or dispute municipal parking tickets. Payment options, locations and common questions about ticketing.",
          "robots": "",
          "canonical": "https://www.halifax.ca/transportation/parking/parking-tickets",
          "ogTitle": "Parking Tickets",
          "ogDescription": "Learn more about how to pay or dispute municipal parking tickets. Payment options, locations and common questions about ticketing.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/transportation/parking/parking-tickets",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 76,
          "tabletSmallTapTargets": 84,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 84,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 76 small targets on mobile and 84 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:36:43 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 9,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 9 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 9,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/9 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 40,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 626356.5,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 326120.5,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "estimatedSavingsBytes": 248772,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26573,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 318.48 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 242.94 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.95 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1284669.5,
        "totalEstimatedBlockingMs": 1543,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 326120.5,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 318 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269683,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 263 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 248772,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 243 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 229133,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 224 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1543,
            "displayValue": "Est savings of 1,540 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 117311,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 115 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42186,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26573,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 318.48 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.36 KB."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "high",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 242.94 KB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "high",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 223.76 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1543 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 114.56 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 862089.7500000005
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 841.88 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 841.88 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 13,
        "urgency": "high",
        "transferBytes": 1548393,
        "css": {
          "unusedBytes": 117311,
          "ratio": 0.07576306531998013,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269683,
          "duplicatedBytes": 0,
          "ratio": 0.17416960681170737,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 117311,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269683,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 23,
        "urgency": "high",
        "transferBytes": 1548393,
        "estimatedDeferrableBytes": 429180,
        "renderBlockingMs": 1543,
        "breakdown": {
          "offscreenImageSavings": 42186,
          "unusedJavascriptSavings": 269683,
          "unusedCssSavings": 117311
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42186,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269683,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 117311,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1543,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 351367,
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2021-07/TicketBlank.jpg",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 814582,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158342,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20857,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2224,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776972990314&cv=11&fst=1776972990314&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fparking%2Fparking-tickets&rcb=7&frm=0&tiba=How%20to%20pay%20%7C%20Parking%20Tickets%20%7C%20Dispute%20%7C%20Payment%20options%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 31,
        "urgency": "medium",
        "transferBytes": 1548393,
        "estimatedRedundantBytes": 386994,
        "redundancyRatio": 0.2499326721316875,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269683,
            "displayValue": "Est savings of 263 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 117311,
            "displayValue": "Est savings of 115 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269683,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 117311,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 34,
        "urgency": "medium",
        "totalTransferBytes": 1548393,
        "heavyRequestCount": 5,
        "heavyBytes": 973434,
        "heavyRatio": 0.6286737281814113,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2021-07/TicketBlank.jpg",
            "transferSize": 351367,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622067
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 351367
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622067
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 351367
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42186,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269683,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 351367,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2021-07/TicketBlank.jpg",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.03,
          "displayValue": "7.9 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 7.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 263 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 263 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 115 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 115 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,540 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,540 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.68,
          "displayValue": "4.8 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 318 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 318 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 243 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 243 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,336 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,336 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/transportation/parking/street-parking",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/transportation/parking/street-parking",
      "performanceScore": 0.6,
      "bestPracticesScore": 0.79,
      "transferBytes": 1998557,
      "co2Grams": 0.7656100135398002,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622062,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158456,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 150093,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20857,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2229,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973010752&cv=11&fst=1776973010752&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938468~117266400~118128922&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fparking%2Fstreet-parking&rcb=7&frm=0&tiba=On-street%20parking%20%7C%20parking%20pay%20stations%20%7C%20HotSpot%20app%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "halifax-hotspot.curbiq.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 1629,
            "sampleUrl": "https://halifax-hotspot.curbiq.io/static/js/main.e58de9c9.js",
            "greenCheck": {
              "hostname": "halifax-hotspot.curbiq.io",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:37:00.646500",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/halifax-hotspot.curbiq.io",
              "error": null
            }
          },
          {
            "hostname": "halifax-hotspot.curbiq.io",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 0,
            "sampleUrl": "https://halifax-hotspot.curbiq.io/static/css/main.6ec2f922.css",
            "greenCheck": {
              "hostname": "halifax-hotspot.curbiq.io",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:37:00.646500",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/halifax-hotspot.curbiq.io",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 8,
          "greenCount": 4,
          "notGreenCount": 5,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "On-street parking | parking pay stations | HotSpot app | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "On-street parking, pay stations, using HotSpot app to pay for parking in Halifax Regional Municipality.",
          "robots": "",
          "canonical": "https://www.halifax.ca/transportation/parking/street-parking",
          "ogTitle": "On-Street Parking",
          "ogDescription": "On-street parking, pay stations, using HotSpot app to pay for parking in Halifax Regional Municipality.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/transportation/parking/street-parking",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 73,
          "tabletSmallTapTargets": 79,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 73,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 79,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 73 small targets on mobile and 79 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:37:03 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 14,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 14
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "14 of 14 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 14,
            "lazyImages": 0,
            "totalIframes": 1,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/14 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 32,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 646063.5000000001,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 572199.5000000001,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 23496,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25477,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 558.79 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.95 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.88 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1921610.5,
        "totalEstimatedBlockingMs": 729,
        "opportunities": [
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 649920,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 635 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 572199.5000000001,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 559 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 268951,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 263 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 253168,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 247 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 103508,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 101 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 23496,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 23 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 729,
            "displayValue": "Est savings of 730 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25477,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 634.69 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 558.79 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 262.65 KB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "high",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 247.23 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 101.08 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1306938.5000000005
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.25 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.25 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 10,
        "urgency": "high",
        "transferBytes": 1998557,
        "css": {
          "unusedBytes": 103508,
          "ratio": 0.05179136747163078,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 268951,
          "duplicatedBytes": 0,
          "ratio": 0.1345725941266624,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 103508,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 268951,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 24,
        "urgency": "high",
        "transferBytes": 1998557,
        "estimatedDeferrableBytes": 1022379,
        "renderBlockingMs": 729,
        "breakdown": {
          "offscreenImageSavings": 649920,
          "unusedJavascriptSavings": 268951,
          "unusedCssSavings": 103508
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 649920,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 268951,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 103508,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 729,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 281038,
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2020-10/Parking%20Pay%20Zones.jpg",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 85,
        "urgency": "high",
        "providerCount": 6,
        "requestCount": 56,
        "transferBytes": 816325,
        "notGreenCount": 2,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622062,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158456,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20857,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2229,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973010752&cv=11&fst=1776973010752&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938468~117266400~118128922&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fparking%2Fstreet-parking&rcb=7&frm=0&tiba=On-street%20parking%20%7C%20parking%20pay%20stations%20%7C%20HotSpot%20app%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "halifax-hotspot.curbiq.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 1629,
            "sampleUrl": "https://halifax-hotspot.curbiq.io/static/js/main.e58de9c9.js",
            "greenCheck": {
              "hostname": "halifax-hotspot.curbiq.io",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:37:00.646500",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/halifax-hotspot.curbiq.io",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 6 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "2 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 25,
        "urgency": "medium",
        "transferBytes": 1998557,
        "estimatedRedundantBytes": 372459,
        "redundancyRatio": 0.18636396159829316,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 268951,
            "displayValue": "Est savings of 263 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 103508,
            "displayValue": "Est savings of 101 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 268951,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 103508,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 44,
        "urgency": "high",
        "totalTransferBytes": 1998557,
        "heavyRequestCount": 7,
        "heavyBytes": 1367959,
        "heavyRatio": 0.6844733475202358,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2020-10/Parking%20Pay%20Zones.jpg",
            "transferSize": 281038,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2022-09/how-to-park-sept-1.png",
            "transferSize": 217104,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160347,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "image",
            "count": 3,
            "transferBytes": 745897
          },
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622062
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622062
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 2,
            "transferBytes": 498142
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 649920,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 268951,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 281038,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2020-10/Parking%20Pay%20Zones.jpg",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.23,
          "displayValue": "5.2 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 5.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 263 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 263 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 101 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 101 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 730 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 730 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.76,
          "displayValue": "4.3 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 559 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 559 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 635 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 635 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,347 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,347 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/safety-security",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security",
      "performanceScore": 0.44,
      "bestPracticesScore": 0.79,
      "transferBytes": 1706269,
      "co2Grams": 0.6536399172966001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 69,
            "transferBytes": 313117,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173531,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20857,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11094,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2187,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973034238&cv=11&fst=1776973034238&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security&rcb=9&frm=0&tiba=Safety%20%26%20Security%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Safety & Security | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Services including civlian-led safety programs, emergency management and Halifax Regional Fire & Emergency, Halifax Regional Police and RCMP.",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security",
          "ogTitle": "Safety & Security",
          "ogDescription": "Services including civlian-led safety programs, emergency management and Halifax Regional Fire & Emergency, Halifax Regional Police and RCMP.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 70,
          "tabletSmallTapTargets": 72,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 70,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 72,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 70 small targets on mobile and 72 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:37:26 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 14,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 14
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "14 of 14 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 14,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/14 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 28,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 479056.54999999993,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 285776.54999999993,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 106166,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 57780,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 279.08 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 103.68 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 56.43 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1053682.5499999998,
        "totalEstimatedBlockingMs": 1636,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 285776.54999999993,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 279 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270795,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 261720,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 256 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1636,
            "displayValue": "Est savings of 1,640 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 106166,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 104 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 57780,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 56 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42111,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 279.08 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.45 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 255.59 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1636 ms."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 103.68 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 56.43 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1022293.4999999999
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 998.33 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 998.33 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 15,
        "urgency": "high",
        "transferBytes": 1706269,
        "css": {
          "unusedBytes": 261720,
          "ratio": 0.1533873029399233,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270795,
          "duplicatedBytes": 0,
          "ratio": 0.15870592503292272,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 261720,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270795,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 24,
        "urgency": "high",
        "transferBytes": 1706269,
        "estimatedDeferrableBytes": 574626,
        "renderBlockingMs": 1636,
        "breakdown": {
          "offscreenImageSavings": 42111,
          "unusedJavascriptSavings": 270795,
          "unusedCssSavings": 261720
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42111,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270795,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 261720,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1636,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 225765,
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/safety.jpg?itok=QRupBLwZ",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 829736,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173531,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20857,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11094,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2187,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973034238&cv=11&fst=1776973034238&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security&rcb=9&frm=0&tiba=Safety%20%26%20Security%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 37,
        "urgency": "high",
        "transferBytes": 1706269,
        "estimatedRedundantBytes": 532515,
        "redundancyRatio": 0.312093227972846,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270795,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 261720,
            "displayValue": "Est savings of 256 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270795,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 261720,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 33,
        "urgency": "medium",
        "totalTransferBytes": 1706269,
        "heavyRequestCount": 6,
        "heavyBytes": 1011272,
        "heavyRatio": 0.5926802866371012,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/safety.jpg?itok=QRupBLwZ",
            "transferSize": 225765,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622067
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 225765
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622067
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 2,
            "transferBytes": 389205
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42111,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270795,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 225765,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/safety.jpg?itok=QRupBLwZ",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "13.2 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 13.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 256 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 256 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 279 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 279 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 104 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 104 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,640 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,640 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 870 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 870 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.57,
          "displayValue": "5.3 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,262 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,262 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/safety-security/emergency-management",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security/emergency-management",
      "performanceScore": 0.48,
      "bestPracticesScore": 0.75,
      "transferBytes": 1216688,
      "co2Grams": 0.46609054240320014,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156888,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 147942,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11098,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2194,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973055810&cv=11&fst=1776973055810&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Femergency-management&rcb=7&frm=0&tiba=Emergency%20Management%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Emergency Management | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Emergency Management helps plan and coordinate multi-agency/multi-jurisdictional responses and the municipality’s response to emergencies.",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security/emergency-management",
          "ogTitle": "Emergency Management",
          "ogDescription": "Emergency Management helps plan and coordinate multi-agency/multi-jurisdictional responses and the municipality’s response to emergencies.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security/emergency-management",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 68,
          "tabletSmallTapTargets": 74,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 68,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 74,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 68 small targets on mobile and 74 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:37:47 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 12,
          "imagesWithLazy": 4,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 12 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 12,
            "lazyImages": 4,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 4/12 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 16,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 197765.15000000002,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 103198.15000000001,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 46218,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 23458,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 100.78 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 45.13 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.91 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 613797.15,
        "totalEstimatedBlockingMs": 1384,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270314,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1384,
            "displayValue": "Est savings of 1,380 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 103602,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 101 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 103198.15000000001,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 101 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42116,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 23458,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 23 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 46218,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 45 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.98 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1384 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 101.17 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 100.78 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 536102.8916666666
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 523.54 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 523.54 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 15,
        "urgency": "high",
        "transferBytes": 1216688,
        "css": {
          "unusedBytes": 103602,
          "ratio": 0.08515083571137383,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270314,
          "duplicatedBytes": 0,
          "ratio": 0.22217199479242009,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 103602,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270314,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 23,
        "urgency": "high",
        "transferBytes": 1216688,
        "estimatedDeferrableBytes": 416032,
        "renderBlockingMs": 1384,
        "breakdown": {
          "offscreenImageSavings": 42116,
          "unusedJavascriptSavings": 270314,
          "unusedCssSavings": 103602
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270314,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 103602,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1384,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 813105,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156888,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11098,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2194,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973055810&cv=11&fst=1776973055810&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Femergency-management&rcb=7&frm=0&tiba=Emergency%20Management%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 37,
        "urgency": "medium",
        "transferBytes": 1216688,
        "estimatedRedundantBytes": 373916,
        "redundancyRatio": 0.3073228305037939,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270314,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 103602,
            "displayValue": "Est savings of 101 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270314,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 103602,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1216688,
        "heavyRequestCount": 4,
        "heavyBytes": 622067,
        "heavyRatio": 0.5112789803137698,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622067
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622067
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270314,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.02,
          "displayValue": "8.3 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 8.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 101 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 101 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 101 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 101 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,380 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,380 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,390 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,390 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.76,
          "displayValue": "4.3 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 45 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 45 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,212 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,212 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/safety-security/fire-emergency",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security/fire-emergency",
      "performanceScore": 0.52,
      "bestPracticesScore": 0.75,
      "transferBytes": 2158355,
      "co2Grams": 0.8268256550969999,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 65,
            "transferBytes": 444266,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 76,
            "transferBytes": 192607,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11104,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2201,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973074067&cv=11&fst=1776973074067&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Ffire-emergency&rcb=18&frm=0&tiba=Fire%20%7C%20Firefighting%20%7C%20Fire%20Safety%20%26%20Prevention%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Fire | Firefighting | Fire Safety & Prevention | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The oldest fire department in Canada. Since 1754, Halifax Regional Fire & Emergency (HRFE) has been dedicated to enhancing and preserving the quality of life and property.",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security/fire-emergency",
          "ogTitle": "Fire & Emergency",
          "ogDescription": "The oldest fire department in Canada. Since 1754, Halifax Regional Fire & Emergency (HRFE) has been dedicated to enhancing and preserving the quality of life and property.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security/fire-emergency",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 76,
          "tabletSmallTapTargets": 79,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 79,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 76 small targets on mobile and 79 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 66,
          "externalScriptsWithoutIntegrity": 66,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:38:09 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "66 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 20,
        "urgency": "low",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 18,
          "imagesWithLazy": 9,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 18,
            "lazyImages": 9,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 9/18 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 15,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 326135.65,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "estimatedSavingsBytes": 122058,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 116996.65000000001,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 54746,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 32335,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 119.20 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 114.25 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 53.46 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.58 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1447064.65,
        "totalEstimatedBlockingMs": 801,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 398188,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 389 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 322473,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 315 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 257480,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 251 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 142788,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 139 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 122058,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 119 KiB",
            "urgency": "high",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 116996.65000000001,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 114 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 54746,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 53 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 32335,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 32 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 801,
            "displayValue": "Est savings of 800 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 388.86 KB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "high",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 314.92 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 251.45 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 139.44 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "high",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 119.20 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 114.25 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 66,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "66 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1102318.7833333337
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.05 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.05 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 13,
        "urgency": "high",
        "transferBytes": 2158355,
        "css": {
          "unusedBytes": 142788,
          "ratio": 0.06615593820293696,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 398188,
          "duplicatedBytes": 0,
          "ratio": 0.18448679665763973,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 142788,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 398188,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 19,
        "urgency": "high",
        "transferBytes": 2158355,
        "estimatedDeferrableBytes": 798456,
        "renderBlockingMs": 801,
        "breakdown": {
          "offscreenImageSavings": 257480,
          "unusedJavascriptSavings": 398188,
          "unusedCssSavings": 142788
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 257480,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 398188,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 142788,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 801,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from cdn.halifax.ca",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 246025,
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 73,
        "transferBytes": 1100496,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 65,
            "transferBytes": 444266,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11104,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2201,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973074067&cv=11&fst=1776973074067&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Ffire-emergency&rcb=18&frm=0&tiba=Fire%20%7C%20Firefighting%20%7C%20Fire%20Safety%20%26%20Prevention%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 34,
        "urgency": "high",
        "transferBytes": 2158355,
        "estimatedRedundantBytes": 540976,
        "redundancyRatio": 0.2506427348605767,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 398188,
            "displayValue": "Est savings of 389 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 142788,
            "displayValue": "Est savings of 139 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 398188,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 142788,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 27,
        "urgency": "medium",
        "totalTransferBytes": 2158355,
        "heavyRequestCount": 5,
        "heavyBytes": 868092,
        "heavyRatio": 0.4022007501083001,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "transferSize": 246025,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 5,
            "transferBytes": 868092
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622067
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 246025
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 257480,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 398188,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 246025,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "12.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 12.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 389 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 389 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 139 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 139 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 800 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 800 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-rel-preconnect",
          "title": "Preconnect to required origins",
          "description": "Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).",
          "score": 0,
          "displayValue": "Est savings of 320 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Preconnect to required origins\n\n- Lighthouse audit: uses-rel-preconnect\n- Current value: Est savings of 320 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nConsider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.55,
          "displayValue": "5.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 114 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 114 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 53 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 53 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 251 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 251 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,526 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,526 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/safety-security/public-safety-strategy-programs",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security/public-safety-strategy-programs",
      "performanceScore": 0.53,
      "bestPracticesScore": 0.79,
      "transferBytes": 1187755,
      "co2Grams": 0.455006848257,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622064,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 73,
            "transferBytes": 174506,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156838,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11116,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2209,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973097321&cv=11&fst=1776973097321&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266400~118128923&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Fpublic-safety-strategy-programs&rcb=1&frm=0&tiba=Public%20safety%20strategy%20%26%20programs%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Public safety strategy & programs | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Learn more about our municipality’s community-driven public safety transformation.",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security/public-safety-strategy-programs",
          "ogTitle": "Public safety strategy & programs",
          "ogDescription": "Learn more about our municipality’s community-driven public safety transformation.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security/public-safety-strategy-programs",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 72,
          "tabletSmallTapTargets": 77,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 72,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 77,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 72 small targets on mobile and 77 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:38:28 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 13,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 156752.1,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 66627.1,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29252,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 35982,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 65.07 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.57 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 35.14 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 597533.1,
        "totalEstimatedBlockingMs": 868,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269410,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 263 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 129259,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 126 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 66627.1,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 65 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 29252,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 868,
            "displayValue": "Est savings of 870 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 35982,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 35 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.10 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 126.23 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 65.07 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 28.57 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 507988.1500000001
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 496.08 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 496.08 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1187755,
        "css": {
          "unusedBytes": 129259,
          "ratio": 0.10882631519126419,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269410,
          "duplicatedBytes": 0,
          "ratio": 0.22682287172017798,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 129259,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269410,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 19,
        "urgency": "high",
        "transferBytes": 1187755,
        "estimatedDeferrableBytes": 440781,
        "renderBlockingMs": 868,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 269410,
          "unusedCssSavings": 129259
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269410,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 129259,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 868,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 813085,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622064,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156838,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11116,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2209,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973097321&cv=11&fst=1776973097321&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266400~118128923&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Fpublic-safety-strategy-programs&rcb=1&frm=0&tiba=Public%20safety%20strategy%20%26%20programs%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 38,
        "urgency": "medium",
        "transferBytes": 1187755,
        "estimatedRedundantBytes": 398669,
        "redundancyRatio": 0.3356491869114422,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269410,
            "displayValue": "Est savings of 263 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 129259,
            "displayValue": "Est savings of 126 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269410,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 129259,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1187755,
        "heavyRequestCount": 4,
        "heavyBytes": 622064,
        "heavyRatio": 0.5237309041005931,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162233,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622064
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622064
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269410,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "11.2 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 11.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 263 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 263 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 126 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 126 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 65 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 65 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 35 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 35 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 870 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 870 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,180 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,180 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.75,
          "displayValue": "4.4 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.4 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,186 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,186 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/safety-security/police",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security/police",
      "performanceScore": 0.42,
      "bestPracticesScore": 0.75,
      "transferBytes": 1209694,
      "co2Grams": 0.4634112710916,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622062,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 75,
            "transferBytes": 201371,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158225,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11120,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2232,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973116836&cv=11&fst=1776973116836&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938469~117266400~117384405&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Fpolice&rcb=4&frm=0&tiba=Halifax%20Regional%20Police%20%7C%20Report%20Crime%20%7C%20Serving%20Communities%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Halifax Regional Police | Report Crime | Serving Communities | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax Regional Police (HRP) is responsible for policing the urban core of Halifax Regional Municipality as well as the area commonly referred to as the Sambro Loop and the Purcells Cove - Herring Cove Loop. The remaining areas of HRM are policed by the RCMP.",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security/police",
          "ogTitle": "Halifax Regional Police",
          "ogDescription": "Halifax Regional Police (HRP) is responsible for policing the urban core of Halifax Regional Municipality as well as the area commonly referred to as the Sambro Loop and the Purcells Cove - Herring Cove Loop. The remaining areas of HRM are policed by the RCMP.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security/police",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 76,
          "tabletSmallTapTargets": 87,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 87,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 76 small targets on mobile and 87 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:38:48 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 38,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 10,
          "imagesWithLazy": 2,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 10 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 10,
            "lazyImages": 2,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 2/10 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 12,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 150194.4,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 57746.4,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 35075,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 32482,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 56.39 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.25 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 31.72 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 617214.4,
        "totalEstimatedBlockingMs": 969,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269865,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 155039,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 151 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 57746.4,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 56 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42116,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 35075,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 34 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 969,
            "displayValue": "Est savings of 970 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 32482,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 32 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.54 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 151.41 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 56.39 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 34.25 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 526025.5750000002
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 513.70 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 513.70 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1209694,
        "css": {
          "unusedBytes": 155039,
          "ratio": 0.12816381663461998,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269865,
          "duplicatedBytes": 0,
          "ratio": 0.22308534224357565,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 155039,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269865,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 20,
        "urgency": "high",
        "transferBytes": 1209694,
        "estimatedDeferrableBytes": 467020,
        "renderBlockingMs": 969,
        "breakdown": {
          "offscreenImageSavings": 42116,
          "unusedJavascriptSavings": 269865,
          "unusedCssSavings": 155039
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269865,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 155039,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 969,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 814497,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622062,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158225,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11120,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2232,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973116836&cv=11&fst=1776973116836&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938469~117266400~117384405&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Fpolice&rcb=4&frm=0&tiba=Halifax%20Regional%20Police%20%7C%20Report%20Crime%20%7C%20Serving%20Communities%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 37,
        "urgency": "medium",
        "transferBytes": 1209694,
        "estimatedRedundantBytes": 424904,
        "redundancyRatio": 0.35124915887819563,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269865,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 155039,
            "displayValue": "Est savings of 151 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269865,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 155039,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1209694,
        "heavyRequestCount": 4,
        "heavyBytes": 622062,
        "heavyRatio": 0.5142308716088532,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136476,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622062
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622062
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269865,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.25,
          "displayValue": "5.1 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 5.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 151 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 151 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 970 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 970 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,290 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,290 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.65,
          "displayValue": "4.9 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 56 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 56 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 32 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 32 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,431 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,431 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/safety-security/halifax-district-rcmp",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security/halifax-district-rcmp",
      "performanceScore": 0.46,
      "bestPracticesScore": 0.75,
      "transferBytes": 1124880,
      "co2Grams": 0.43092060523200004,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622062,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 158410,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 149284,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2210,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973136690&cv=11&fst=1776973136690&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~117384405~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Fhalifax-district-rcmp&rcb=14&frm=0&tiba=Halifax%20District%20RCMP%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Halifax District RCMP | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax operates under an integrated policing model: Halifax Regional Police is responsible for policing the urban core of Halifax as well as the Sambro Loop and the Purcells Cove – Herring Cove Loop, the remaining areas are policed by the RCMP Halifax Regional Detachment.",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security/halifax-district-rcmp",
          "ogTitle": "Halifax District RCMP",
          "ogDescription": "Halifax operates under an integrated policing model: Halifax Regional Police is responsible for policing the urban core of Halifax as well as the Sambro Loop and the Purcells Cove – Herring Cove Loop, the remaining areas are policed by the RCMP Halifax Regional Detachment.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security/halifax-district-rcmp",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 66,
          "tabletSmallTapTargets": 70,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 66,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 70,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 66 small targets on mobile and 70 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:39:09 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 43,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 9,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 9 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 9,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/9 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 127056.65,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 23443,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 47814.65,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 30908,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.89 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 46.69 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 30.18 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 543416.65,
        "totalEstimatedBlockingMs": 1590,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270393,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1590,
            "displayValue": "Est savings of 1,590 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 103725,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 101 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42242,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 23443,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 23 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 47814.65,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 47 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 30908,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.06 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1590 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 101.29 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.25 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 22.89 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 446564.3166666669
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 436.10 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 436.10 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1124880,
        "css": {
          "unusedBytes": 103725,
          "ratio": 0.0922098357158097,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270393,
          "duplicatedBytes": 0,
          "ratio": 0.24037497333048857,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 103725,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270393,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 25,
        "urgency": "high",
        "transferBytes": 1124880,
        "estimatedDeferrableBytes": 416360,
        "renderBlockingMs": 1590,
        "breakdown": {
          "offscreenImageSavings": 42242,
          "unusedJavascriptSavings": 270393,
          "unusedCssSavings": 103725
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42242,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270393,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 103725,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1590,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162993,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 814662,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622062,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 158410,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2210,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973136690&cv=11&fst=1776973136690&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~117384405~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Fhalifax-district-rcmp&rcb=14&frm=0&tiba=Halifax%20District%20RCMP%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 36,
        "urgency": "medium",
        "transferBytes": 1124880,
        "estimatedRedundantBytes": 374118,
        "redundancyRatio": 0.3325848090462983,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270393,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 103725,
            "displayValue": "Est savings of 101 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270393,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 103725,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 32,
        "urgency": "medium",
        "totalTransferBytes": 1124880,
        "heavyRequestCount": 4,
        "heavyBytes": 622062,
        "heavyRatio": 0.5530029869852784,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162993,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622062
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622062
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42242,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270393,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162993,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "9.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 9.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 101 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 101 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 47 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 47 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 30 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,590 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,590 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,220 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,220 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.6,
          "displayValue": "5.2 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,121 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,121 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/safety-security/crossing-guard-program",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security/crossing-guard-program",
      "performanceScore": 0.45,
      "bestPracticesScore": 0.79,
      "transferBytes": 1352597,
      "co2Grams": 0.5181547523958001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622055,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 379277,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173641,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2220,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973156312&cv=11&fst=1776973156312&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266400~118128922~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Fcrossing-guard-program&rcb=12&frm=0&tiba=Crossing%20Guards%20%7C%20Community%20Safety%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Crossing Guards | Community Safety | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax Regional Municipality provides crossing guards in areas close to elementary schools to help students safely arrive to and from school.",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security/crossing-guard-program",
          "ogTitle": "Crossing Guard Program",
          "ogDescription": "Halifax Regional Municipality provides crossing guards in areas close to elementary schools to help students safely arrive to and from school.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security/crossing-guard-program",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 71,
          "tabletSmallTapTargets": 76,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 71,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 71 small targets on mobile and 76 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:39:27 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 12,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 157244.05,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 72210,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30326.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 70.52 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 796285.05,
        "totalEstimatedBlockingMs": 1771,
        "opportunities": [
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 326033,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 318 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270896,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1771,
            "displayValue": "Est savings of 1,770 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 72210,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 71 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30326.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 318.39 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.55 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1771 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 70.52 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 28.65 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 671535.8000000004
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 655.80 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 655.80 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 20,
        "urgency": "high",
        "transferBytes": 1352597,
        "css": {
          "unusedBytes": 326033,
          "ratio": 0.24104223209130288,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270896,
          "duplicatedBytes": 0,
          "ratio": 0.2002784273512362,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 326033,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270896,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 27,
        "urgency": "high",
        "transferBytes": 1352597,
        "estimatedDeferrableBytes": 639041,
        "renderBlockingMs": 1771,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270896,
          "unusedCssSavings": 326033
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270896,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 326033,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1771,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162994,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 829896,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622055,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173641,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2220,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973156312&cv=11&fst=1776973156312&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266400~118128922~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Fcrossing-guard-program&rcb=12&frm=0&tiba=Crossing%20Guards%20%7C%20Community%20Safety%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 44,
        "urgency": "high",
        "transferBytes": 1352597,
        "estimatedRedundantBytes": 596929,
        "redundancyRatio": 0.44132065944253906,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 326033,
            "displayValue": "Est savings of 318 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270896,
            "displayValue": "Est savings of 265 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 326033,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270896,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 33,
        "urgency": "medium",
        "totalTransferBytes": 1352597,
        "heavyRequestCount": 5,
        "heavyBytes": 785495,
        "heavyRatio": 0.5807309937845493,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162994,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
            "transferSize": 162234,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
            "transferSize": 160350,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
            "transferSize": 136477,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622055
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622055
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270896,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162994,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "11.2 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 11.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 265 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 318 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 318 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 30 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 25 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,770 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,770 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,060 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,060 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.65,
          "displayValue": "4.9 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,183 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,183 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/fire-police/fire-emergency-management/emergency-management/emergency-preparedness/voluntary",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security/emergency-management/voluntary-vulnerable-persons-registry",
      "performanceScore": 0.36,
      "bestPracticesScore": 0.75,
      "transferBytes": 1433513,
      "co2Grams": 0.5491521669582,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622055,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 326394,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174997,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2231,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973175602&cv=11&fst=1776973175602&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Femergency-management%2Fvoluntary-vulnerable-persons-registry&rcb=11&frm=0&tiba=Voluntary%20Vulnerable%20Persons%20Registry%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Voluntary Vulnerable Persons Registry | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Vulnerable Persons Registry - The Voluntary Vulnerable Persons Registry (VVPR) is a voluntary, self-referral list intended for Halifax Regional Municipality residents who may be more at-risk during emergencies.",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security/emergency-management/voluntary-vulnerable-persons-registry",
          "ogTitle": "Voluntary Vulnerable Persons Registry",
          "ogDescription": "Vulnerable Persons Registry - The Voluntary Vulnerable Persons Registry (VVPR) is a voluntary, self-referral list intended for Halifax Regional Municipality residents who may be more at-risk during emergencies.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security/emergency-management/voluntary-vulnerable-persons-registry",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 70,
          "tabletSmallTapTargets": 76,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 70,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 70 small targets on mobile and 76 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:39:46 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 44,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 10,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 10 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 10,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/10 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 23,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 333627.9,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 142734.9,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 100994,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 60565,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 139.39 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 98.63 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 59.15 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 948109.9,
        "totalEstimatedBlockingMs": 1615,
        "opportunities": [
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 274753,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 268 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270515,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1615,
            "displayValue": "Est savings of 1,620 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 142734.9,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 139 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 100994,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 99 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 60565,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 59 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42116,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 27098,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-responsive-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 268.31 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.17 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1615 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 139.39 KB."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 98.63 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 59.15 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 747164.2666666673
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 729.65 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 729.65 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 18,
        "urgency": "high",
        "transferBytes": 1433513,
        "css": {
          "unusedBytes": 274753,
          "ratio": 0.19166411466097621,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270515,
          "duplicatedBytes": 0,
          "ratio": 0.18870774105292384,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 274753,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270515,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 26,
        "urgency": "high",
        "transferBytes": 1433513,
        "estimatedDeferrableBytes": 587384,
        "renderBlockingMs": 1615,
        "breakdown": {
          "offscreenImageSavings": 42116,
          "unusedJavascriptSavings": 270515,
          "unusedCssSavings": 274753
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270515,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 274753,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1615,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163441,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162994,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 831263,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622055,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174997,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2231,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973175602&cv=11&fst=1776973175602&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Femergency-management%2Fvoluntary-vulnerable-persons-registry&rcb=11&frm=0&tiba=Voluntary%20Vulnerable%20Persons%20Registry%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 41,
        "urgency": "high",
        "transferBytes": 1433513,
        "estimatedRedundantBytes": 545268,
        "redundancyRatio": 0.38037185571390003,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 274753,
            "displayValue": "Est savings of 268 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270515,
            "displayValue": "Est savings of 264 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 274753,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270515,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 36,
        "urgency": "medium",
        "totalTransferBytes": 1433513,
        "heavyRequestCount": 6,
        "heavyBytes": 910839,
        "heavyRatio": 0.6353894244419129,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163441,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162994,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
            "transferSize": 162234,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
            "transferSize": 160350,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
            "transferSize": 136477,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2023-11/cc_emergency_vvpr_homepagecard-360-x-240-px.jpg",
            "transferSize": 125343,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622055
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163441
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 125343
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622055
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 2,
            "transferBytes": 288784
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270515,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163441,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162994,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "12.0 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 12.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 268 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 268 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 139 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 139 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 99 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 99 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,620 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,620 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,290 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,290 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.59,
          "displayValue": "5.3 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,353 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,353 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/safety-security/police/crime-mapping",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security/police/crime-mapping",
      "performanceScore": 0.52,
      "bestPracticesScore": 0.75,
      "transferBytes": 1122917,
      "co2Grams": 0.4301686164438,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622055,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157487,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 148476,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2208,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973195318&cv=11&fst=1776973195318&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938468~117266401~118463261&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Fpolice%2Fcrime-mapping&rcb=9&frm=0&tiba=Crime%20Mapping%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Crime Mapping | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Crime Mapping",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security/police/crime-mapping",
          "ogTitle": "Halifax crime mapping",
          "ogDescription": "Crime Mapping",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security/police/crime-mapping",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 66,
          "tabletSmallTapTargets": 78,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 66,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 78,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 66 small targets on mobile and 78 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:40:07 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 44,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 10,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 10 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 10,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/10 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 9,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 104051.04999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 23454,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30329.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25377,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.90 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 520277.05,
        "totalEstimatedBlockingMs": 706,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270344,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 103766,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 101 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42116,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 23454,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 23 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 706,
            "displayValue": "Est savings of 710 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30329.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25377,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.01 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 101.33 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 22.90 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "medium",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 706 ms."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 440462.59166666685
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 430.14 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 430.14 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1122917,
        "css": {
          "unusedBytes": 103766,
          "ratio": 0.09240754214247357,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270344,
          "duplicatedBytes": 0,
          "ratio": 0.24075154263405044,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 103766,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270344,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1122917,
        "estimatedDeferrableBytes": 416226,
        "renderBlockingMs": 706,
        "breakdown": {
          "offscreenImageSavings": 42116,
          "unusedJavascriptSavings": 270344,
          "unusedCssSavings": 103766
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270344,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 103766,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 706,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162994,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 813730,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622055,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157487,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2208,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973195318&cv=11&fst=1776973195318&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938468~117266401~118463261&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Fpolice%2Fcrime-mapping&rcb=9&frm=0&tiba=Crime%20Mapping%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 38,
        "urgency": "medium",
        "transferBytes": 1122917,
        "estimatedRedundantBytes": 374110,
        "redundancyRatio": 0.333159084776524,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270344,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 103766,
            "displayValue": "Est savings of 101 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270344,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 103766,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 32,
        "urgency": "medium",
        "totalTransferBytes": 1122917,
        "heavyRequestCount": 4,
        "heavyBytes": 622055,
        "heavyRatio": 0.5539634719217894,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162994,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
            "transferSize": 162234,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
            "transferSize": 160350,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
            "transferSize": 136477,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622055
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622055
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270344,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162994,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.19,
          "displayValue": "5.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 5.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 101 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 101 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 710 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 710 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,540 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,540 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.64,
          "displayValue": "5.0 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,394 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,394 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/fire-police/fire/recruitment/volunteer-firefighter-recruitment",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security/fire-emergency/recruitment-volunteers",
      "performanceScore": 0.15,
      "bestPracticesScore": 0.75,
      "transferBytes": 6248141,
      "co2Grams": 2.3935466016774,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "hrm.maps.arcgis.com",
            "resourceType": "script",
            "requestCount": 610,
            "transferBytes": 2545018,
            "sampleUrl": "https://hrm.maps.arcgis.com/apps/instant/_astro/SetComponentsAssetPaths.astro_astro_type_script_index_0_lang.DkvzSypa.js",
            "greenCheck": {
              "hostname": "hrm.maps.arcgis.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:40:30.804323",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/hrm.maps.arcgis.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 8,
            "transferBytes": 1643147,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 355667,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 175945,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "stylesheet",
            "requestCount": 4,
            "transferBytes": 106045,
            "sampleUrl": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "js.arcgis.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 37506,
            "sampleUrl": "https://js.arcgis.com/5.0/esri/themes/light/main.css",
            "greenCheck": {
              "hostname": "js.arcgis.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:40:30.012703",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/js.arcgis.com",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 23611,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "hrm.maps.arcgis.com",
            "resourceType": "stylesheet",
            "requestCount": 3,
            "transferBytes": 12864,
            "sampleUrl": "https://hrm.maps.arcgis.com/apps/instant/_astro/index.CU929Heg.css",
            "greenCheck": {
              "hostname": "hrm.maps.arcgis.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:40:30.804323",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/hrm.maps.arcgis.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2239,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973215364&cv=11&fst=1776973215364&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Ffire-emergency%2Frecruitment-volunteers&rcb=1&frm=0&tiba=Volunteer%20firefighters%20%7C%20Halifax%20Regional%20Municipality%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 497,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 12,
          "greenCount": 7,
          "notGreenCount": 6,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Volunteer firefighters | Halifax Regional Municipality | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "With over 550 volunteer firefighters across HRM, these members are critical to our emergency response. There are 22 volunteer only stations, 14 combined 24-hour career and volunteer stations and seven weekday career and volunteer stations.",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security/fire-emergency/recruitment-volunteers",
          "ogTitle": "Volunteer firefighters in HRM",
          "ogDescription": "With over 550 volunteer firefighters across HRM, these members are critical to our emergency response. There are 22 volunteer only stations, 14 combined 24-hour career and volunteer stations and seven weekday career and volunteer stations.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security/fire-emergency/recruitment-volunteers",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 23,
          "tabletSmallTapTargets": 76,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 23,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 23 small targets on mobile and 76 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 55,
          "externalScriptsWithoutIntegrity": 55,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:40:39 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "55 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 45,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 11,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 10
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "10 of 11 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 11,
            "lazyImages": 1,
            "totalIframes": 2,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/11 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 6,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 383457.8,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 266586.8,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 66516,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25464,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.34 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 64.96 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.87 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1241832.8,
        "totalEstimatedBlockingMs": 2336,
        "opportunities": [
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 300573,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 294 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 289709,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 283 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 268093,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 262 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 266586.8,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 260 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2336,
            "displayValue": "Est savings of 2,340 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 66516,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 65 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25464,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 293.53 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 282.92 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 261.81 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 260.34 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 2336 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 64.96 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 55,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "55 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 3163443.585416668
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 3.02 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 3.02 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 6,
        "urgency": "high",
        "transferBytes": 6248141,
        "css": {
          "unusedBytes": 300573,
          "ratio": 0.048105988645262644,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 268093,
          "duplicatedBytes": 0,
          "ratio": 0.04290764244917008,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 300573,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 268093,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 19,
        "urgency": "high",
        "transferBytes": 6248141,
        "estimatedDeferrableBytes": 858375,
        "renderBlockingMs": 2336,
        "breakdown": {
          "offscreenImageSavings": 289709,
          "unusedJavascriptSavings": 268093,
          "unusedCssSavings": 300573
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 289709,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 268093,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 300573,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2336,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.youtube.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 483697,
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from hrm.maps.arcgis.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 213550,
            "url": "https://hrm.maps.arcgis.com/apps/instant/_astro/ShadowCastClear.glsl.BmBV6Wsz.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 85,
        "urgency": "high",
        "providerCount": 8,
        "requestCount": 675,
        "transferBytes": 5033382,
        "notGreenCount": 2,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "hrm.maps.arcgis.com",
            "resourceType": "script",
            "requestCount": 610,
            "transferBytes": 2545018,
            "sampleUrl": "https://hrm.maps.arcgis.com/apps/instant/_astro/SetComponentsAssetPaths.astro_astro_type_script_index_0_lang.DkvzSypa.js",
            "greenCheck": {
              "hostname": "hrm.maps.arcgis.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:40:30.804323",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/hrm.maps.arcgis.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 8,
            "transferBytes": 1643147,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 175945,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 23611,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2239,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973215364&cv=11&fst=1776973215364&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Ffire-emergency%2Frecruitment-volunteers&rcb=1&frm=0&tiba=Volunteer%20firefighters%20%7C%20Halifax%20Regional%20Municipality%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 497,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 8 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "2 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 23,
        "urgency": "high",
        "transferBytes": 6248141,
        "estimatedRedundantBytes": 568666,
        "redundancyRatio": 0.09101363109443272,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 300573,
            "displayValue": "Est savings of 294 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 268093,
            "displayValue": "Est savings of 262 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 300573,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 268093,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 33,
        "urgency": "high",
        "totalTransferBytes": 6248141,
        "heavyRequestCount": 18,
        "heavyBytes": 3302499,
        "heavyRatio": 0.5285570540101447,
        "heavyRequests": [
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "transferSize": 483697,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed_es6.vflset/en_US/base.js",
            "transferSize": 446749,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://hrm.maps.arcgis.com/apps/instant/_astro/ShadowCastClear.glsl.BmBV6Wsz.js",
            "transferSize": 213550,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "hrm.maps.arcgis.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/exm=base,root/ed=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=r78Drb",
            "transferSize": 208641,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/exm=base,root/ed=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=r78Drb",
            "transferSize": 188813,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163471,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=root,base",
            "transferSize": 160585,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "transferSize": 143540,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://hrm.maps.arcgis.com/apps/instant/_astro/ProjectionTransformation.BWvbZJEr.js",
            "transferSize": 120256,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "hrm.maps.arcgis.com"
          },
          {
            "url": "https://hrm.maps.arcgis.com/apps/instant/_astro/MultiPathImpl.C4JVKSX3.js",
            "transferSize": 114371,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "hrm.maps.arcgis.com"
          },
          {
            "url": "https://hrm.maps.arcgis.com/apps/instant/_astro/ApplicationBase.Cv5d8iY4.js",
            "transferSize": 82959,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "hrm.maps.arcgis.com"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "transferSize": 59175,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/ss/k=ytembeds.base.oRmnRxCtskc.L.W.O/am=AAAABA/d=0/br=1/rs=AGKMywHkqPKx19LNLTFOD88ZyDOWYDGFJw",
            "transferSize": 46870,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 14,
            "transferBytes": 2785228
          },
          {
            "resourceType": "stylesheet",
            "count": 3,
            "transferBytes": 269516
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.youtube.com",
            "count": 8,
            "transferBytes": 1738070
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622067
          },
          {
            "domain": "hrm.maps.arcgis.com",
            "count": 4,
            "transferBytes": 531136
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163471
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 289709,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 268093,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.youtube.com",
            "urgency": "high",
            "estimatedSavingsBytes": 483697,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "13.9 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 13.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.14,
          "displayValue": "9.0 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 9.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 262 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 262 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 294 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 294 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 2,340 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 2,340 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-rel-preconnect",
          "title": "Preconnect to required origins",
          "description": "Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).",
          "score": 0,
          "displayValue": "Est savings of 330 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Preconnect to required origins\n\n- Lighthouse audit: uses-rel-preconnect\n- Current value: Est savings of 330 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nConsider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 940 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 940 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 260 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 260 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 283 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 283 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 6,102 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 6,102 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,392 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,392 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/fire-police/fire/emergency-management",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security/emergency-management/about-emergency-management",
      "performanceScore": 0.56,
      "bestPracticesScore": 0.75,
      "transferBytes": 1580382,
      "co2Grams": 0.6054149490948001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 73,
            "transferBytes": 352947,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174947,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2232,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973250623&cv=11&fst=1776973250623&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938468~117266401~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Femergency-management%2Fabout-emergency-management&rcb=1&frm=0&tiba=Emergency%20Management%20%7C%20Halifax%20Regional%20Municipality%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Emergency Management | Halifax Regional Municipality | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Everyone has a role to play in making sure we all stay safe in emergencies. Learn how the municipality's Emergency Management division leads the initial response to emergencies and disasters.",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security/emergency-management/about-emergency-management",
          "ogTitle": "About Emergency Management",
          "ogDescription": "Everyone has a role to play in making sure we all stay safe in emergencies. Learn how the municipality's Emergency Management division leads the initial response to emergencies and disasters.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security/emergency-management/about-emergency-management",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 69,
          "tabletSmallTapTargets": 72,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 69,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 72,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 69 small targets on mobile and 72 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:41:02 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 45,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 12,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 11
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "11 of 12 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 12,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/12 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 25,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 395972.35,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 274899.35,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 66365,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 268.46 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 64.81 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1255933.35,
        "totalEstimatedBlockingMs": 1626,
        "opportunities": [
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 300467,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 293 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 289592,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 283 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 274899.35,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 268 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269902,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1626,
            "displayValue": "Est savings of 1,630 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 66365,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 65 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 293.42 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 282.80 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 268.46 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.58 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1626 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 64.81 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 897711.1416666668
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 876.67 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 876.67 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1580382,
        "css": {
          "unusedBytes": 300467,
          "ratio": 0.1901230208898861,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269902,
          "duplicatedBytes": 0,
          "ratio": 0.17078276011749058,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 300467,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269902,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 30,
        "urgency": "high",
        "transferBytes": 1580382,
        "estimatedDeferrableBytes": 859961,
        "renderBlockingMs": 1626,
        "breakdown": {
          "offscreenImageSavings": 289592,
          "unusedJavascriptSavings": 269902,
          "unusedCssSavings": 300467
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 289592,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269902,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 300467,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1626,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 831226,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174947,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2232,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973250623&cv=11&fst=1776973250623&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938468~117266401~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Femergency-management%2Fabout-emergency-management&rcb=1&frm=0&tiba=Emergency%20Management%20%7C%20Halifax%20Regional%20Municipality%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 40,
        "urgency": "high",
        "transferBytes": 1580382,
        "estimatedRedundantBytes": 570369,
        "redundancyRatio": 0.3609057810073767,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 300467,
            "displayValue": "Est savings of 293 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269902,
            "displayValue": "Est savings of 264 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 300467,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269902,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 39,
        "urgency": "medium",
        "totalTransferBytes": 1580382,
        "heavyRequestCount": 6,
        "heavyBytes": 1033262,
        "heavyRatio": 0.6538052192444611,
        "heavyRequests": [
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622067
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622067
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 289592,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269902,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.24,
          "displayValue": "5.1 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 5.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 293 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 293 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,630 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,630 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 830 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 830 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.76,
          "displayValue": "4.3 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 268 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 268 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 283 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 283 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,247 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,247 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/fire-police/emergency-management/hfxalert",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security/emergency-management/hfxalert",
      "performanceScore": 0.31,
      "bestPracticesScore": 0.75,
      "transferBytes": 2983267,
      "co2Grams": 1.1428340989338002,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 7,
            "transferBytes": 1007494,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 73,
            "transferBytes": 340344,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174932,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "stylesheet",
            "requestCount": 4,
            "transferBytes": 105999,
            "sampleUrl": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 23611,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2224,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973270987&cv=11&fst=1776973270987&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266401~117384406&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Femergency-management%2Fhfxalert&rcb=10&frm=0&tiba=hfxALERT%20%7C%20Mass%20Notifications%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 94,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 9,
          "greenCount": 7,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "hfxALERT | Mass Notifications | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "hfxALERT is the municipal mass notification system keeping residents informed about urgent and non-urgent situations.",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security/emergency-management/hfxalert",
          "ogTitle": "hfxALERT",
          "ogDescription": "hfxALERT is the municipal mass notification system keeping residents informed about urgent and non-urgent situations.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security/emergency-management/hfxalert",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 73,
          "tabletSmallTapTargets": 78,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 73,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 78,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 73 small targets on mobile and 78 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 52,
          "externalScriptsWithoutIntegrity": 52,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:41:27 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "52 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 45,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 13,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 12
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "12 of 13 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 13,
            "lazyImages": 1,
            "totalIframes": 1,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/13 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 13,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 393062.35,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 274869.35,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 63488,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25371,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 268.43 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 62.00 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1237909.35,
        "totalEstimatedBlockingMs": 1688,
        "opportunities": [
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 289588,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 283 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 287380,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 281 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 274869.35,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 268 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 267879,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 262 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1688,
            "displayValue": "Est savings of 1,690 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 63488,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 62 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25371,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 282.80 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 280.64 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 268.43 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 261.60 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1688 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 62.00 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 52,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "52 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 987273.8124999995
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 964.13 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 964.13 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 10,
        "urgency": "high",
        "transferBytes": 2983267,
        "css": {
          "unusedBytes": 287380,
          "ratio": 0.09633063349676714,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 267879,
          "duplicatedBytes": 0,
          "ratio": 0.08979384010884711,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 287380,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 267879,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 23,
        "urgency": "high",
        "transferBytes": 2983267,
        "estimatedDeferrableBytes": 844847,
        "renderBlockingMs": 1688,
        "breakdown": {
          "offscreenImageSavings": 289588,
          "unusedJavascriptSavings": 267879,
          "unusedCssSavings": 287380
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 289588,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 267879,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 287380,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1688,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.youtube.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 483677,
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 7,
        "requestCount": 62,
        "transferBytes": 1851280,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 7,
            "transferBytes": 1007494,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174932,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 23611,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2224,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973270987&cv=11&fst=1776973270987&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266401~117384406&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Femergency-management%2Fhfxalert&rcb=10&frm=0&tiba=hfxALERT%20%7C%20Mass%20Notifications%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 94,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 7 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 28,
        "urgency": "high",
        "transferBytes": 2983267,
        "estimatedRedundantBytes": 555259,
        "redundancyRatio": 0.18612447360561424,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 287380,
            "displayValue": "Est savings of 281 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 267879,
            "displayValue": "Est savings of 262 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 287380,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 267879,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 42,
        "urgency": "high",
        "totalTransferBytes": 2983267,
        "heavyRequestCount": 12,
        "heavyBytes": 2135633,
        "heavyRatio": 0.7158705539933234,
        "heavyRequests": [
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "transferSize": 483677,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/exm=base,root/ed=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=r78Drb",
            "transferSize": 208619,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=root,base",
            "transferSize": 160561,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "transferSize": 143515,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "transferSize": 59154,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/ss/k=ytembeds.base.oRmnRxCtskc.L.W.O/am=AAAABA/d=0/br=1/rs=AGKMywHkqPKx19LNLTFOD88ZyDOWYDGFJw",
            "transferSize": 46845,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 8,
            "transferBytes": 1618439
          },
          {
            "resourceType": "stylesheet",
            "count": 3,
            "transferBytes": 269439
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.youtube.com",
            "count": 6,
            "transferBytes": 1102371
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622067
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 289588,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 267879,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.youtube.com",
            "urgency": "high",
            "estimatedSavingsBytes": 483677,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.05,
          "displayValue": "7.3 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 7.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.26,
          "displayValue": "7.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 7.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 262 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 262 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 281 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 281 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,690 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,690 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,300 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,300 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 268 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 268 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 283 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 283 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 2,913 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 2,913 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,418 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,418 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/business",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/business",
      "performanceScore": 0.52,
      "bestPracticesScore": 0.79,
      "transferBytes": 2010555,
      "co2Grams": 0.770206224177,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622044,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 69,
            "transferBytes": 314624,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 174540,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11099,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2180,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973296040&cv=11&fst=1776973296040&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401~117884344&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness&rcb=12&frm=0&tiba=Business%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Business | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Information for businesses such as licensing, development, land management and more.",
          "robots": "",
          "canonical": "https://www.halifax.ca/business",
          "ogTitle": "Business",
          "ogDescription": "Information for businesses such as licensing, development, land management and more.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/business",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 72,
          "tabletSmallTapTargets": 73,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 72,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 73,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 72 small targets on mobile and 73 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:41:49 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 15,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 15
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "15 of 15 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 15,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/15 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 35,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 702144.25,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 436613.24999999994,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "estimatedSavingsBytes": 178392,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 57805,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 426.38 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 174.21 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 56.45 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1276857.25,
        "totalEstimatedBlockingMs": 1533,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 436613.24999999994,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 426 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270753,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 261728,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 256 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1533,
            "displayValue": "Est savings of 1,530 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 178392,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 174 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 57805,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 56 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42232,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 426.38 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.41 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 255.59 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1533 ms."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 174.21 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 56.45 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1323957.2666666668
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.26 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.26 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 13,
        "urgency": "high",
        "transferBytes": 2010555,
        "css": {
          "unusedBytes": 261728,
          "ratio": 0.130176990930365,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270753,
          "duplicatedBytes": 0,
          "ratio": 0.13466580123398764,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 261728,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270753,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 22,
        "urgency": "high",
        "transferBytes": 2010555,
        "estimatedDeferrableBytes": 574713,
        "renderBlockingMs": 1533,
        "breakdown": {
          "offscreenImageSavings": 42232,
          "unusedJavascriptSavings": 270753,
          "unusedCssSavings": 261728
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42232,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270753,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 261728,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1533,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 493751,
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/business.jpg?itok=zPVDdEfQ",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163470,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162994,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 830721,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622044,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 174540,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11099,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2180,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973296040&cv=11&fst=1776973296040&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401~117884344&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness&rcb=12&frm=0&tiba=Business%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 32,
        "urgency": "high",
        "transferBytes": 2010555,
        "estimatedRedundantBytes": 532481,
        "redundancyRatio": 0.26484279216435264,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270753,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 261728,
            "displayValue": "Est savings of 256 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270753,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 261728,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 35,
        "urgency": "high",
        "totalTransferBytes": 2010555,
        "heavyRequestCount": 6,
        "heavyBytes": 1279265,
        "heavyRatio": 0.6362745610042998,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/business.jpg?itok=zPVDdEfQ",
            "transferSize": 493751,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163470,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162994,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
            "transferSize": 162220,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
            "transferSize": 160342,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
            "transferSize": 136488,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622044
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 493751
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163470
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "cdn.halifax.ca",
            "count": 2,
            "transferBytes": 657221
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622044
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42232,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270753,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 493751,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/business.jpg?itok=zPVDdEfQ",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163470,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162994,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "12.4 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 12.4 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 256 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 256 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 426 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 426 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 174 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 174 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,530 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,530 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.54,
          "displayValue": "5.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,282 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,282 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/business/doing-business-halifax",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/business/doing-business-halifax",
      "performanceScore": 0.65,
      "bestPracticesScore": 0.79,
      "transferBytes": 1126596,
      "co2Grams": 0.4315779729144001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622064,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 161185,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156856,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11065,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2188,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973316141&cv=11&fst=1776973316141&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Fdoing-business-halifax&rcb=14&frm=0&tiba=Doing%20business%20with%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Doing business with Halifax | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Doing business with Halifax",
          "robots": "",
          "canonical": "https://www.halifax.ca/business/doing-business-halifax",
          "ogTitle": "Doing Business with Halifax",
          "ogDescription": "Doing business with Halifax",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/business/doing-business-halifax",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 69,
          "tabletSmallTapTargets": 76,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 69,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 69 small targets on mobile and 76 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:42:08 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 9,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 106939.04999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26348,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30326.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.73 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 536215.05,
        "totalEstimatedBlockingMs": 721,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270837,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 116327,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 114 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26348,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 721,
            "displayValue": "Est savings of 720 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30326.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.49 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 113.60 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 25.73 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "medium",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 721 ms."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 446769.59166666673
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 436.30 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 436.30 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1126596,
        "css": {
          "unusedBytes": 116327,
          "ratio": 0.10325529293553323,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270837,
          "duplicatedBytes": 0,
          "ratio": 0.2404029483506066,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 116327,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270837,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 18,
        "urgency": "high",
        "transferBytes": 1126596,
        "estimatedDeferrableBytes": 429276,
        "renderBlockingMs": 721,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270837,
          "unusedCssSavings": 116327
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270837,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 116327,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 721,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 813031,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622064,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156856,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11065,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2188,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973316141&cv=11&fst=1776973316141&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Fdoing-business-halifax&rcb=14&frm=0&tiba=Doing%20business%20with%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 39,
        "urgency": "medium",
        "transferBytes": 1126596,
        "estimatedRedundantBytes": 387164,
        "redundancyRatio": 0.34365824128613986,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270837,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 116327,
            "displayValue": "Est savings of 114 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270837,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 116327,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 32,
        "urgency": "medium",
        "totalTransferBytes": 1126596,
        "heavyRequestCount": 4,
        "heavyBytes": 622064,
        "heavyRatio": 0.5521624433248475,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136478,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622064
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622064
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270837,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.42,
          "displayValue": "4.3 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 114 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 114 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 720 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 720 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,233 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,233 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/business/business-parks",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/business/business-parks",
      "performanceScore": 0.49,
      "bestPracticesScore": 0.79,
      "transferBytes": 1193918,
      "co2Grams": 0.45736777892520003,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 187815,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158170,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11063,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2219,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973335741&cv=11&fst=1776973335741&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938468~117266400~117384406~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Fbusiness-parks&rcb=14&frm=0&tiba=Business%20Parks%20%7C%20Burnside%20%7C%20Bayers%20Lake%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Business Parks | Burnside | Bayers Lake | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The Halifax Regional Municipality owns six business and industrial parks in the region. These are serviced building lots of varying sizes for companies looking to expand or relocate.",
          "robots": "",
          "canonical": "https://www.halifax.ca/business/business-parks",
          "ogTitle": "Business Parks",
          "ogDescription": "The Halifax Regional Municipality owns six business and industrial parks in the region. These are serviced building lots of varying sizes for companies looking to expand or relocate.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/business/business-parks",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 71,
          "tabletSmallTapTargets": 77,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 71,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 77,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 71 small targets on mobile and 77 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:42:28 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 13,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 149519.05,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 60654.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 32142,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 31832,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 59.23 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.39 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 31.09 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 604499.05,
        "totalEstimatedBlockingMs": 1020,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270882,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 141988,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 139 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1020,
            "displayValue": "Est savings of 1,020 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 60654.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 59 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42110,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 32142,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 31 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 31832,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 31 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.53 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 138.66 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1020 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 59.23 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.12 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 31.39 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 513554.3750000003
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 501.52 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 501.52 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1193918,
        "css": {
          "unusedBytes": 141988,
          "ratio": 0.11892609040151836,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270882,
          "duplicatedBytes": 0,
          "ratio": 0.22688492844567215,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 141988,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270882,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 1193918,
        "estimatedDeferrableBytes": 454980,
        "renderBlockingMs": 1020,
        "breakdown": {
          "offscreenImageSavings": 42110,
          "unusedJavascriptSavings": 270882,
          "unusedCssSavings": 141988
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42110,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270882,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 141988,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1020,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 814377,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622067,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158170,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11063,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2219,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973335741&cv=11&fst=1776973335741&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938468~117266400~117384406~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Fbusiness-parks&rcb=14&frm=0&tiba=Business%20Parks%20%7C%20Burnside%20%7C%20Bayers%20Lake%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 39,
        "urgency": "medium",
        "transferBytes": 1193918,
        "estimatedRedundantBytes": 412870,
        "redundancyRatio": 0.3458110188471905,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270882,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 141988,
            "displayValue": "Est savings of 139 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270882,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 141988,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1193918,
        "heavyRequestCount": 4,
        "heavyBytes": 622067,
        "heavyRatio": 0.5210299199777539,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162236,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160352,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136481,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622067
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622067
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42110,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270882,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.14,
          "displayValue": "5.9 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 5.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 265 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 139 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 139 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,020 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,020 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 830 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 830 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.79,
          "displayValue": "4.1 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 59 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 59 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 31 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 31 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,222 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,222 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/business/filming-halifax",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/business/filming-halifax",
      "performanceScore": 0.51,
      "bestPracticesScore": 0.79,
      "transferBytes": 1385267,
      "co2Grams": 0.5306700217338,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622065,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 157416,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 134799,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11070,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2217,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973355419&cv=11&fst=1776973355419&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Ffilming-halifax&rcb=3&frm=0&tiba=Filming%20in%20Halifax%20%7C%20Filming%20TV%20%26%20Movies%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Filming in Halifax | Filming TV & Movies | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "To film in Halifax you must fill out the application form found here. You will also find useful information such as filming guidelines and contact.",
          "robots": "",
          "canonical": "https://www.halifax.ca/business/filming-halifax",
          "ogTitle": "Filming in Halifax",
          "ogDescription": "To film in Halifax you must fill out the application form found here. You will also find useful information such as filming guidelines and contact.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/business/filming-halifax",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 76,
          "tabletSmallTapTargets": 80,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 80,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 76 small targets on mobile and 80 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:42:47 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 9,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 9 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 9,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/9 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 7,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 101152.04999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 20493,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30360.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25408,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 20.01 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.65 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 789213.05,
        "totalEstimatedBlockingMs": 1241,
        "opportunities": [
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 284306,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 278 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270687,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1241,
            "displayValue": "Est savings of 1,240 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 90923,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 89 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42145,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 20493,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 20 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30360.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25408,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Right-size images for viewport",
            "urgency": "high",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 277.64 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.34 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1241 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 88.79 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.16 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 704269.7250000001
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 687.76 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 687.76 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 14,
        "urgency": "high",
        "transferBytes": 1385267,
        "css": {
          "unusedBytes": 90923,
          "ratio": 0.06563572221095283,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270687,
          "duplicatedBytes": 0,
          "ratio": 0.19540420727556493,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 90923,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270687,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 1385267,
        "estimatedDeferrableBytes": 403755,
        "renderBlockingMs": 1241,
        "breakdown": {
          "offscreenImageSavings": 42145,
          "unusedJavascriptSavings": 270687,
          "unusedCssSavings": 90923
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42145,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270687,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 90923,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1241,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 303245,
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2017-07/Filming%20in%20Halifax.jpg",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162995,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 813626,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622065,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 157416,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11070,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2217,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973355419&cv=11&fst=1776973355419&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Ffilming-halifax&rcb=3&frm=0&tiba=Filming%20in%20Halifax%20%7C%20Filming%20TV%20%26%20Movies%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 29,
        "urgency": "medium",
        "transferBytes": 1385267,
        "estimatedRedundantBytes": 361610,
        "redundancyRatio": 0.2610399294865178,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270687,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 90923,
            "displayValue": "Est savings of 89 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270687,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 90923,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 36,
        "urgency": "medium",
        "totalTransferBytes": 1385267,
        "heavyRequestCount": 5,
        "heavyBytes": 925310,
        "heavyRatio": 0.667965092650009,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2017-07/Filming%20in%20Halifax.jpg",
            "transferSize": 303245,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162995,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
            "transferSize": 162237,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
            "transferSize": 160353,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
            "transferSize": 136480,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622065
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 303245
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622065
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 303245
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42145,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270687,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 303245,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2017-07/Filming%20in%20Halifax.jpg",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162995,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "10.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 10.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 89 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 89 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,240 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,240 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,153 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,153 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/business/licences",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/business/licences",
      "performanceScore": 0.51,
      "bestPracticesScore": 0.79,
      "transferBytes": 1272678,
      "co2Grams": 0.4875392699892,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622087,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 162603,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 157867,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11075,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2183,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973374664&cv=11&fst=1776973374664&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Flicences&rcb=4&frm=0&tiba=Licences%20in%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Licences in Halifax | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Licences in Halifax",
          "robots": "",
          "canonical": "https://www.halifax.ca/business/licences",
          "ogTitle": "Licences",
          "ogDescription": "Licences in Halifax",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/business/licences",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 69,
          "tabletSmallTapTargets": 75,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 69,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 75,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 69 small targets on mobile and 75 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:43:07 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 34,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 11,
          "imagesWithLazy": 3,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 11 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 11,
            "lazyImages": 3,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 3/11 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 17,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 215764.95,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 118484.95,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 46022,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26367,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 115.71 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 44.94 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.75 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 644981.95,
        "totalEstimatedBlockingMs": 1724,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270772,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1724,
            "displayValue": "Est savings of 1,720 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 118484.95,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 116 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 116270,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 114 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42175,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26367,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 46022,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 45 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.43 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1724 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 115.71 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 113.54 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.19 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 25.75 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 590868.6750000003
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 577.02 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 577.02 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 15,
        "urgency": "high",
        "transferBytes": 1272678,
        "css": {
          "unusedBytes": 116270,
          "ratio": 0.09135853688049923,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270772,
          "duplicatedBytes": 0,
          "ratio": 0.21275766533247215,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 116270,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270772,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 24,
        "urgency": "high",
        "transferBytes": 1272678,
        "estimatedDeferrableBytes": 429217,
        "renderBlockingMs": 1724,
        "breakdown": {
          "offscreenImageSavings": 42175,
          "unusedJavascriptSavings": 270772,
          "unusedCssSavings": 116270
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42175,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270772,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 116270,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1724,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163003,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 814070,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622087,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 157867,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11075,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2183,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973374664&cv=11&fst=1776973374664&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Flicences&rcb=4&frm=0&tiba=Licences%20in%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 34,
        "urgency": "medium",
        "transferBytes": 1272678,
        "estimatedRedundantBytes": 387042,
        "redundancyRatio": 0.30411620221297136,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270772,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 116270,
            "displayValue": "Est savings of 114 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270772,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 116270,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 28,
        "urgency": "medium",
        "totalTransferBytes": 1272678,
        "heavyRequestCount": 4,
        "heavyBytes": 622087,
        "heavyRatio": 0.48880156646064443,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163003,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162241,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160357,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136486,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622087
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622087
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42175,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270772,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163003,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.02,
          "displayValue": "8.0 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 8.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 114 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 114 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,720 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,720 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 970 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 970 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.53,
          "displayValue": "5.6 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 116 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 116 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 45 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 45 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,265 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,265 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/business/planning-development",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/business/planning-development",
      "performanceScore": 0.5,
      "bestPracticesScore": 0.79,
      "transferBytes": 1889162,
      "co2Grams": 0.7237028237868,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622070,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 48,
            "transferBytes": 404122,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 76,
            "transferBytes": 214924,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11079,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2224,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973395255&cv=11&fst=1776973395255&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Fplanning-development&rcb=9&frm=0&tiba=Planning%20%26%20Development%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Planning & Development | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Planning & Development, current development projects, applications, properties, civic addressing, permits, and licensing",
          "robots": "",
          "canonical": "https://www.halifax.ca/business/planning-development",
          "ogTitle": "Planning & Development",
          "ogDescription": "Planning & Development, current development projects, applications, properties, civic addressing, permits, and licensing",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/business/planning-development",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 74,
          "tabletSmallTapTargets": 81,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 74,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 81,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 74 small targets on mobile and 81 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 49,
          "externalScriptsWithoutIntegrity": 49,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:43:28 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "49 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 44,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 10,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 10 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 10,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/10 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 13,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 251417.75,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "estimatedSavingsBytes": 115879,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 65858.75,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 38028,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 31652,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 113.16 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 64.32 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 37.14 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 30.91 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1222666.75,
        "totalEstimatedBlockingMs": 1020,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 397786,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 388 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 329679,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 322 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 167837,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 164 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 115879,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 113 KiB",
            "urgency": "high",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1020,
            "displayValue": "Est savings of 1,020 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 75947,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 74 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 65858.75,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 64 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 38028,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 37 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 31652,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 31 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 388.46 KB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "high",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 321.95 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 163.90 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "high",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 113.16 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1020 ms."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 74.17 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 49,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "49 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 847446.6916666667
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 827.58 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 827.58 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 15,
        "urgency": "high",
        "transferBytes": 1889162,
        "css": {
          "unusedBytes": 167837,
          "ratio": 0.0888420368396146,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 397786,
          "duplicatedBytes": 0,
          "ratio": 0.21056214342655633,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 167837,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 397786,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 20,
        "urgency": "high",
        "transferBytes": 1889162,
        "estimatedDeferrableBytes": 641570,
        "renderBlockingMs": 1020,
        "breakdown": {
          "offscreenImageSavings": 75947,
          "unusedJavascriptSavings": 397786,
          "unusedCssSavings": 167837
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 75947,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 397786,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 167837,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1020,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from cdn.halifax.ca",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 245972,
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.bsky.app",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 180398,
            "url": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:oecw7r33o4wdj362rlmvfc4v/bafkreia4p7wkchkplosnlso5e73sdd4k7hgb6ag7uzggicourbafzdgewe",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162999,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 56,
        "transferBytes": 1060353,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622070,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 48,
            "transferBytes": 404122,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11079,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2224,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973395255&cv=11&fst=1776973395255&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Fplanning-development&rcb=9&frm=0&tiba=Planning%20%26%20Development%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 36,
        "urgency": "high",
        "transferBytes": 1889162,
        "estimatedRedundantBytes": 565623,
        "redundancyRatio": 0.29940418026617094,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 397786,
            "displayValue": "Est savings of 388 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 167837,
            "displayValue": "Est savings of 164 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 397786,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 167837,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 37,
        "urgency": "high",
        "totalTransferBytes": 1889162,
        "heavyRequestCount": 7,
        "heavyBytes": 1182897,
        "heavyRatio": 0.6261490544484803,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "transferSize": 245972,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:oecw7r33o4wdj362rlmvfc4v/bafkreia4p7wkchkplosnlso5e73sdd4k7hgb6ag7uzggicourbafzdgewe",
            "transferSize": 180398,
            "resourceType": "image",
            "mimeType": "image/webp",
            "domain": "cdn.bsky.app"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162999,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
            "transferSize": 162225,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
            "transferSize": 160347,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
            "transferSize": 136499,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:oecw7r33o4wdj362rlmvfc4v/bafkreie4k3no3emjlmj75pdruk2kch3dzmlexwah3ffiumegcqbqz6prgu",
            "transferSize": 134457,
            "resourceType": "image",
            "mimeType": "image/webp",
            "domain": "cdn.bsky.app"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 5,
            "transferBytes": 868042
          },
          {
            "resourceType": "image",
            "count": 2,
            "transferBytes": 314855
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622070
          },
          {
            "domain": "cdn.bsky.app",
            "count": 2,
            "transferBytes": 314855
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 245972
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 75947,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 397786,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 245972,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.bsky.app",
            "urgency": "medium",
            "estimatedSavingsBytes": 180398,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:oecw7r33o4wdj362rlmvfc4v/bafkreia4p7wkchkplosnlso5e73sdd4k7hgb6ag7uzggicourbafzdgewe",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162999,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.27,
          "displayValue": "5.0 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 5.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 388 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 388 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 164 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 164 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,020 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,020 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.66,
          "displayValue": "4.8 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 64 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 64 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 31 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 31 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 74 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 74 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,344 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,344 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/business/real-estate-land-management",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/business/real-estate-land-management",
      "performanceScore": 0.44,
      "bestPracticesScore": 0.79,
      "transferBytes": 1175508,
      "co2Grams": 0.4503152503512,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622099,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 187017,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158220,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11090,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2226,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973415995&cv=11&fst=1776973415995&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~117884344&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Freal-estate-land-management&rcb=3&frm=0&tiba=Real%20Estate%20%7C%20Land%20Sales%20%7C%20Property%20for%20Sale%20%7C%20Halifax%20%7C%20HRM%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Real Estate | Land Sales | Property for Sale | Halifax | HRM | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Real estate and land management",
          "robots": "",
          "canonical": "https://www.halifax.ca/business/real-estate-land-management",
          "ogTitle": "Real Estate & Land Management",
          "ogDescription": "Real estate and land management",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/business/real-estate-land-management",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 72,
          "tabletSmallTapTargets": 77,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 72,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 77,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 72 small targets on mobile and 77 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:43:46 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 124145.75,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 32168,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 41709.74999999999,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25377,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.41 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 40.73 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 579452.75,
        "totalEstimatedBlockingMs": 1006,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 271203,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 141988,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 139 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1006,
            "displayValue": "Est savings of 1,010 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42116,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 32168,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 31 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 41709.74999999999,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25377,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.85 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 138.66 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1006 ms."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 31.41 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 495801.5583333334
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 484.18 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 484.18 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1175508,
        "css": {
          "unusedBytes": 141988,
          "ratio": 0.12078862925645763,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 271203,
          "duplicatedBytes": 0,
          "ratio": 0.2307113180003879,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 141988,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 271203,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 1175508,
        "estimatedDeferrableBytes": 455307,
        "renderBlockingMs": 1006,
        "breakdown": {
          "offscreenImageSavings": 42116,
          "unusedJavascriptSavings": 271203,
          "unusedCssSavings": 141988
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 271203,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 141988,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1006,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163006,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 814493,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622099,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158220,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11090,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2226,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973415995&cv=11&fst=1776973415995&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~117884344&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Freal-estate-land-management&rcb=3&frm=0&tiba=Real%20Estate%20%7C%20Land%20Sales%20%7C%20Property%20for%20Sale%20%7C%20Halifax%20%7C%20HRM%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 39,
        "urgency": "medium",
        "transferBytes": 1175508,
        "estimatedRedundantBytes": 413191,
        "redundancyRatio": 0.3514999472568455,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 271203,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 141988,
            "displayValue": "Est savings of 139 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 271203,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 141988,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 31,
        "urgency": "medium",
        "totalTransferBytes": 1175508,
        "heavyRequestCount": 4,
        "heavyBytes": 622099,
        "heavyRatio": 0.529217155476611,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163006,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162244,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160360,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136489,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622099
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622099
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 271203,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163006,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "9.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 9.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 265 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 139 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 139 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 41 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,010 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,010 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 910 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 910 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.81,
          "displayValue": "4.0 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,201 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,201 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/business/doing-business-halifax/garbage-recycling-businesses",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/business/doing-business-halifax/garbage-recycling-businesses",
      "performanceScore": 0.49,
      "bestPracticesScore": 0.75,
      "transferBytes": 2746217,
      "co2Grams": 1.0520246530638002,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "api.recollect.net",
            "resourceType": "script",
            "requestCount": 7,
            "transferBytes": 753998,
            "sampleUrl": "https://api.recollect.net/api/areas/Halifax/services/waste.json?callback=svc_cb_1776973434259",
            "greenCheck": {
              "hostname": "api.recollect.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:02.657570",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/api.recollect.net",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622101,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.pendo.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 188594,
            "sampleUrl": "https://cdn.pendo.io/agent/static/0917d9c3-59ba-4540-6ee5-f6e47e00880e/pendo.js",
            "greenCheck": {
              "hostname": "cdn.pendo.io",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:20:13",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.pendo.io",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 163061,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156155,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "recollect-us.global.ssl.fastly.net",
            "resourceType": "stylesheet",
            "requestCount": 4,
            "transferBytes": 105239,
            "sampleUrl": "https://recollect-us.global.ssl.fastly.net/0.11.1776954052/api/areas/Halifax/services/waste/style/widget/logan/Default.css",
            "greenCheck": {
              "hostname": "recollect-us.global.ssl.fastly.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:01.787304",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/recollect-us.global.ssl.fastly.net",
              "error": null
            }
          },
          {
            "hostname": "assets.ca.recollect.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 41163,
            "sampleUrl": "https://assets.ca.recollect.net/0.11.1776873130/javascript/compiled/recollect-widget-loader-prod-us.js",
            "greenCheck": {
              "hostname": "assets.ca.recollect.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:02.676287",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/assets.ca.recollect.net",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11091,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "fonts.googleapis.com",
            "resourceType": "stylesheet",
            "requestCount": 2,
            "transferBytes": 5726,
            "sampleUrl": "https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;0,800;1,300;1,400;1,600;1,700;1,800",
            "greenCheck": {
              "hostname": "fonts.googleapis.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/fonts.googleapis.com",
              "error": null
            }
          },
          {
            "hostname": "cdnjs.cloudflare.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 4530,
            "sampleUrl": "https://cdnjs.cloudflare.com/ajax/libs/mapbox-gl/1.9.1/mapbox-gl.css",
            "greenCheck": {
              "hostname": "cdnjs.cloudflare.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:34",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdnjs.cloudflare.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2217,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973434558&cv=11&fst=1776973434558&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Fdoing-business-halifax%2Fgarbage-recycling-businesses&rcb=10&frm=0&tiba=Garbage%20%26%20Recycling%20for%20Businesses%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "data.pendo.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 1278,
            "sampleUrl": "https://data.pendo.io/data/guide.js/0917d9c3-59ba-4540-6ee5-f6e47e00880e?id=23&jzb=eJyFU21v2zwM_C8G4k-N7dhpgwYQhmxd0QHDtu6lQD8JjMQ4WlXJk-i42YP899JJ6rbAticIEpE8HY9n-r9kY6IhHz7oZJ7IL-8_XXyW3-W12fxqbh-gub1KThJQyreO9pCimJQfC_5MLqtzvLlefGVAGyyX1kRNnOc5NCYLqLy1qChzSHmXR4JAbyAgiCuwZgUPqcZoaiesr8GlEcPGKJRGi6oqUqaQax9J_JUz_Rn_D6HiEdI6jSvjUD-1ER1EwjR4T7KBmmPzG4KWESGoddqwTkeSpzqwj6rFqLzkb9d12fogP1PAiWUbmTdGPmpvXD1-SoyPMC7UEJbcY8zitsq-BGFMrVdgUSA70DaNDyTvvUaxAhsxdXCPL8T3ptzhVqSd0TWSVN6tTC1Gs7ejsuyt5b-91PJocR-X7_i3JxqKh1mH2hLic-31uK_sHC7Q2rBV7BFtWYK_MyjRwdLinrNauNba0eziSaWFrW9J8BDQWn4o-xtioB43FhSm6DaiCV6P25huMETjnSiyySSbzGZn56fT4rTkPfNW3zyva9_oJLlHAg0EyXzY5f5o_rHPK74oe08YwiEZssejD7yM7A9x_0PGgqtbfnwcoZM_viW74X0Y2vzhnWDUYYsWA5ZTrLMnKqu8mOZlUZ5xg-O0fTqryiKbyr0Pxie73SMjbzkm&v=2.320.4_prod-io&ct=1776973435937",
            "greenCheck": {
              "hostname": "data.pendo.io",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:10:07",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/data.pendo.io",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 13,
          "greenCount": 8,
          "notGreenCount": 6,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Garbage & Recycling for Businesses | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Information on garbage & recycling for businesses in Halifax.",
          "robots": "",
          "canonical": "https://www.halifax.ca/business/doing-business-halifax/garbage-recycling-businesses",
          "ogTitle": "Garbage & Recycling for Businesses",
          "ogDescription": "Information on garbage & recycling for businesses in Halifax.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/business/doing-business-halifax/garbage-recycling-businesses",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 74,
          "tabletSmallTapTargets": 83,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 74,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 83,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 74 small targets on mobile and 83 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 50,
          "externalScriptsWithoutIntegrity": 50,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:44:09 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "50 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 10,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 10
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "10 of 10 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 15,
            "lazyImages": 0,
            "totalIframes": 1,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/15 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 16,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 430828.8,
        "checks": {
          "hasEffectiveTextCompression": false
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 347638.8,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26574,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25449,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "uses-text-compression",
            "title": "Enable Brotli/gzip for text assets",
            "urgency": "low",
            "estimatedSavingsBytes": 6276,
            "detail": "Compress HTML, CSS, JS, JSON, SVG, and XML responses with Brotli or gzip."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 339.49 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.95 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.85 KB."
          },
          {
            "title": "Enable Brotli/gzip for text assets",
            "urgency": "low",
            "detail": "Compress HTML, CSS, JS, JSON, SVG, and XML responses with Brotli or gzip. Estimated savings: 6.13 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1130950.8,
        "totalEstimatedBlockingMs": 1414,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 491494,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 480 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 347638.8,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 339 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 163673,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 160 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1414,
            "displayValue": "Est savings of 1,410 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 44955,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 44 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26574,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25449,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "uses-text-compression",
            "title": "Enable text compression",
            "detail": "Serve text assets with Brotli or gzip to remove avoidable transfer bloat.",
            "estimatedSavingsBytes": 6276,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 6 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-text-compression"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 479.97 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 339.49 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 159.84 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1414 ms."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 43.90 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 25.95 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 50,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "50 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1384875.2303072626
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.32 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.32 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 13,
        "urgency": "high",
        "transferBytes": 2746217,
        "css": {
          "unusedBytes": 163673,
          "ratio": 0.059599441704715976,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 491494,
          "duplicatedBytes": 0,
          "ratio": 0.17897129032410766,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 163673,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 491494,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 2746217,
        "estimatedDeferrableBytes": 700122,
        "renderBlockingMs": 1414,
        "breakdown": {
          "offscreenImageSavings": 44955,
          "unusedJavascriptSavings": 491494,
          "unusedCssSavings": 163673
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 44955,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 491494,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 163673,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1414,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from api.recollect.net",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 342823,
            "url": "https://api.recollect.net/0.11.1776954052/javascript/compiled/recollect-widget-prod-us.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from cdn.pendo.io",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 188594,
            "url": "https://cdn.pendo.io/agent/static/0917d9c3-59ba-4540-6ee5-f6e47e00880e/pendo.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163006,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 90,
        "urgency": "high",
        "providerCount": 9,
        "requestCount": 65,
        "transferBytes": 1797455,
        "notGreenCount": 3,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "api.recollect.net",
            "resourceType": "script",
            "requestCount": 7,
            "transferBytes": 753998,
            "sampleUrl": "https://api.recollect.net/api/areas/Halifax/services/waste.json?callback=svc_cb_1776973434259",
            "greenCheck": {
              "hostname": "api.recollect.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:02.657570",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/api.recollect.net",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622101,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.pendo.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 188594,
            "sampleUrl": "https://cdn.pendo.io/agent/static/0917d9c3-59ba-4540-6ee5-f6e47e00880e/pendo.js",
            "greenCheck": {
              "hostname": "cdn.pendo.io",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:20:13",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.pendo.io",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156155,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "assets.ca.recollect.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 41163,
            "sampleUrl": "https://assets.ca.recollect.net/0.11.1776873130/javascript/compiled/recollect-widget-loader-prod-us.js",
            "greenCheck": {
              "hostname": "assets.ca.recollect.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:02.676287",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/assets.ca.recollect.net",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11091,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2217,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973434558&cv=11&fst=1776973434558&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Fdoing-business-halifax%2Fgarbage-recycling-businesses&rcb=10&frm=0&tiba=Garbage%20%26%20Recycling%20for%20Businesses%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "data.pendo.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 1278,
            "sampleUrl": "https://data.pendo.io/data/guide.js/0917d9c3-59ba-4540-6ee5-f6e47e00880e?id=23&jzb=eJyFU21v2zwM_C8G4k-N7dhpgwYQhmxd0QHDtu6lQD8JjMQ4WlXJk-i42YP899JJ6rbAticIEpE8HY9n-r9kY6IhHz7oZJ7IL-8_XXyW3-W12fxqbh-gub1KThJQyreO9pCimJQfC_5MLqtzvLlefGVAGyyX1kRNnOc5NCYLqLy1qChzSHmXR4JAbyAgiCuwZgUPqcZoaiesr8GlEcPGKJRGi6oqUqaQax9J_JUz_Rn_D6HiEdI6jSvjUD-1ER1EwjR4T7KBmmPzG4KWESGoddqwTkeSpzqwj6rFqLzkb9d12fogP1PAiWUbmTdGPmpvXD1-SoyPMC7UEJbcY8zitsq-BGFMrVdgUSA70DaNDyTvvUaxAhsxdXCPL8T3ptzhVqSd0TWSVN6tTC1Gs7ejsuyt5b-91PJocR-X7_i3JxqKh1mH2hLic-31uK_sHC7Q2rBV7BFtWYK_MyjRwdLinrNauNba0eziSaWFrW9J8BDQWn4o-xtioB43FhSm6DaiCV6P25huMETjnSiyySSbzGZn56fT4rTkPfNW3zyva9_oJLlHAg0EyXzY5f5o_rHPK74oe08YwiEZssejD7yM7A9x_0PGgqtbfnwcoZM_viW74X0Y2vzhnWDUYYsWA5ZTrLMnKqu8mOZlUZ5xg-O0fTqryiKbyr0Pxie73SMjbzkm&v=2.320.4_prod-io&ct=1776973435937",
            "greenCheck": {
              "hostname": "data.pendo.io",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:10:07",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/data.pendo.io",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 9 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "3 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 38,
        "urgency": "high",
        "transferBytes": 2746217,
        "estimatedRedundantBytes": 655167,
        "redundancyRatio": 0.23857073202882365,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 491494,
            "displayValue": "Est savings of 480 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 163673,
            "displayValue": "Est savings of 160 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 491494,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 163673,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Enable and verify text compression",
            "urgency": "medium",
            "estimatedSavingsBytes": 6276,
            "auditId": "uses-text-compression",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 42,
        "urgency": "high",
        "totalTransferBytes": 2746217,
        "heavyRequestCount": 12,
        "heavyBytes": 1929705,
        "heavyRatio": 0.7026775378639052,
        "heavyRequests": [
          {
            "url": "https://api.recollect.net/0.11.1776954052/javascript/compiled/recollect-widget-prod-us.js",
            "transferSize": 342823,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "api.recollect.net"
          },
          {
            "url": "https://api.recollect.net/0.11.1776954052/javascript/compiled/recollect-widget-prod-us.js",
            "transferSize": 342778,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "api.recollect.net"
          },
          {
            "url": "https://cdn.pendo.io/agent/static/0917d9c3-59ba-4540-6ee5-f6e47e00880e/pendo.js",
            "transferSize": 188594,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "cdn.pendo.io"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163006,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162244,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160360,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136491,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://recollect-images.global.ssl.fastly.net/api/image/500/material.default.paint_can_empty.svg",
            "transferSize": 116636,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "recollect-images.global.ssl.fastly.net"
          },
          {
            "url": "https://recollect-images.global.ssl.fastly.net/api/image/500/material.default.furniture.svg",
            "transferSize": 111839,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "recollect-images.global.ssl.fastly.net"
          },
          {
            "url": "https://recollect-images.global.ssl.fastly.net/api/image/500/material.default.milk_carton.svg",
            "transferSize": 106176,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "recollect-images.global.ssl.fastly.net"
          },
          {
            "url": "https://recollect-us.global.ssl.fastly.net/0.11.1776954052/api/areas/Halifax/services/waste/style/widget/logan/Default.css",
            "transferSize": 49379,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "recollect-us.global.ssl.fastly.net"
          },
          {
            "url": "https://recollect-us.global.ssl.fastly.net/0.11.1776954052/api/areas/Halifax/services/waste/style/widget/logan/Default.css",
            "transferSize": 49379,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "recollect-us.global.ssl.fastly.net"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 7,
            "transferBytes": 1496296
          },
          {
            "resourceType": "image",
            "count": 3,
            "transferBytes": 334651
          },
          {
            "resourceType": "stylesheet",
            "count": 2,
            "transferBytes": 98758
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "api.recollect.net",
            "count": 2,
            "transferBytes": 685601
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622101
          },
          {
            "domain": "recollect-images.global.ssl.fastly.net",
            "count": 3,
            "transferBytes": 334651
          },
          {
            "domain": "cdn.pendo.io",
            "count": 1,
            "transferBytes": 188594
          },
          {
            "domain": "recollect-us.global.ssl.fastly.net",
            "count": 2,
            "transferBytes": 98758
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 44955,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 491494,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from api.recollect.net",
            "urgency": "high",
            "estimatedSavingsBytes": 342823,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://api.recollect.net/0.11.1776954052/javascript/compiled/recollect-widget-prod-us.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from cdn.pendo.io",
            "urgency": "medium",
            "estimatedSavingsBytes": 188594,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://cdn.pendo.io/agent/static/0917d9c3-59ba-4540-6ee5-f6e47e00880e/pendo.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.49,
          "displayValue": "5.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 160 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 160 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,410 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,410 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,050 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,050 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.55,
          "displayValue": "3.8 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 3.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 480 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 480 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 339 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 339 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 44 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 44 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-text-compression",
          "title": "Enable text compression",
          "description": "Text-based resources should be served with compression (gzip, deflate or brotli) to minimize total network bytes. [Learn more about text compression](https://developer.chrome.com/docs/lighthouse/performance/uses-text-compression/).",
          "score": 0.5,
          "displayValue": "Est savings of 6 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Enable text compression\n\n- Lighthouse audit: uses-text-compression\n- Current value: Est savings of 6 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nText-based resources should be served with compression (gzip, deflate or brotli) to minimize total network bytes. [Learn more about text compression](https://developer.chrome.com/docs/lighthouse/performance/uses-text-compression/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 2,682 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 2,682 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,498 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,498 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/business/planning-development/planning-subdivision-applications",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/business/planning-development/planning-subdivision-applications",
      "performanceScore": 0.52,
      "bestPracticesScore": 0.79,
      "transferBytes": 1595347,
      "co2Grams": 0.6111477622458001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622106,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 190971,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157135,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2226,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973459407&cv=11&fst=1776973459407&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266400~118128923~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Fplanning-development%2Fplanning-subdivision-applications&rcb=7&frm=0&tiba=Planning%20and%20Subdivision%20application%20information%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Planning and Subdivision application information | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Get information on the different types of planning applications (Variances, Site-Plan approvals, Rezoning, Land-use & By-laws Amendments,",
          "robots": "",
          "canonical": "https://www.halifax.ca/business/planning-development/planning-subdivision-applications",
          "ogTitle": "Planning & Subdivision Applications",
          "ogDescription": "Get information on the different types of planning applications (Variances, Site-Plan approvals, Rezoning, Land-use & By-laws Amendments,",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/business/planning-development/planning-subdivision-applications",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 85,
          "tabletSmallTapTargets": 91,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 85,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 91,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 85 small targets on mobile and 91 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:44:32 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 11,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 11
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "11 of 11 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 11,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/11 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 27,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 437806,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 329413,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 51143,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 32359,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 321.69 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 49.94 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.60 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1140489,
        "totalEstimatedBlockingMs": 1704,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 329413,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 322 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 289664,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 283 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270157,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 142862,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 140 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1704,
            "displayValue": "Est savings of 1,700 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 32359,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 32 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 51143,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 50 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 321.69 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 282.88 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.83 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 139.51 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1704 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 31.60 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 891687.7583333344
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 870.79 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 870.79 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 13,
        "urgency": "high",
        "transferBytes": 1595347,
        "css": {
          "unusedBytes": 142862,
          "ratio": 0.08954917018053125,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270157,
          "duplicatedBytes": 0,
          "ratio": 0.1693405885992201,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 142862,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270157,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 28,
        "urgency": "high",
        "transferBytes": 1595347,
        "estimatedDeferrableBytes": 702683,
        "renderBlockingMs": 1704,
        "breakdown": {
          "offscreenImageSavings": 289664,
          "unusedJavascriptSavings": 270157,
          "unusedCssSavings": 142862
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 289664,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270157,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 142862,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1704,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163007,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 813417,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622106,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157135,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20858,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2226,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973459407&cv=11&fst=1776973459407&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266400~118128923~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Fplanning-development%2Fplanning-subdivision-applications&rcb=7&frm=0&tiba=Planning%20and%20Subdivision%20application%20information%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 32,
        "urgency": "medium",
        "transferBytes": 1595347,
        "estimatedRedundantBytes": 413019,
        "redundancyRatio": 0.25888975877975134,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270157,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 142862,
            "displayValue": "Est savings of 140 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270157,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 142862,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 34,
        "urgency": "medium",
        "totalTransferBytes": 1595347,
        "heavyRequestCount": 5,
        "heavyBytes": 869861,
        "heavyRatio": 0.5452487765984454,
        "heavyRequests": [
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163007,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162245,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160361,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136493,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622106
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622106
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 289664,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270157,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163007,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.01,
          "displayValue": "8.7 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 8.7 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 140 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 140 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,700 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,700 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,200 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,200 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.58,
          "displayValue": "5.3 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 322 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 322 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 50 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 50 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 283 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 283 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "2,478 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 2,478 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/business/doing-business-halifax/procurement",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/business/doing-business-halifax/procurement",
      "performanceScore": 0.52,
      "bestPracticesScore": 0.79,
      "transferBytes": 1268552,
      "co2Grams": 0.4859586761328001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622110,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 50,
            "transferBytes": 165234,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 162915,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2247,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973480662&cv=11&fst=1776973480662&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401~117884344~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Fdoing-business-halifax%2Fprocurement&rcb=5&frm=0&tiba=Procurement%20%7C%20Tenders%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Procurement | Tenders | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Looking for a tender? The municipality's tenders are posted on the Nova Scotia Government's tender notices website.",
          "robots": "",
          "canonical": "https://www.halifax.ca/business/doing-business-halifax/procurement",
          "ogTitle": "Procurement",
          "ogDescription": "Looking for a tender? The municipality's tenders are posted on the Nova Scotia Government's tender notices website.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/business/doing-business-halifax/procurement",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 32,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 94,
          "tabletSmallTapTargets": 102,
          "fixedWidthOffenders": 1,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 1,
            "smallTapTargets": 94,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 102,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 94 small targets on mobile and 102 on tablet."
          },
          {
            "title": "Refactor fixed-width components",
            "urgency": "medium",
            "detail": "1 element(s) exceeded viewport width in tested layouts; use responsive component constraints."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 51,
          "externalScriptsWithoutIntegrity": 51,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:44:52 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "51 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 10,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 10
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "10 of 10 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 10,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/10 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 16,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 205051.7,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 128242.7,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26544,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 125.24 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.92 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 656032.7,
        "totalEstimatedBlockingMs": 1140,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270839,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1140,
            "displayValue": "Est savings of 1,140 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 128242.7,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 125 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 117522,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 115 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26544,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 20508,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 20 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-responsive-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.49 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1140 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 125.24 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 114.77 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 25.92 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 51,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "51 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 584585.2333333336
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 570.88 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 570.88 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 15,
        "urgency": "high",
        "transferBytes": 1268552,
        "css": {
          "unusedBytes": 117522,
          "ratio": 0.09264263506738392,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270839,
          "duplicatedBytes": 0,
          "ratio": 0.21350248156953755,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 117522,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270839,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 1268552,
        "estimatedDeferrableBytes": 430473,
        "renderBlockingMs": 1140,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270839,
          "unusedCssSavings": 117522
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270839,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 117522,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1140,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163008,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 58,
        "transferBytes": 821542,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622110,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 50,
            "transferBytes": 165234,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2247,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973480662&cv=11&fst=1776973480662&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401~117884344~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fbusiness%2Fdoing-business-halifax%2Fprocurement&rcb=5&frm=0&tiba=Procurement%20%7C%20Tenders%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 37,
        "urgency": "medium",
        "transferBytes": 1268552,
        "estimatedRedundantBytes": 388361,
        "redundancyRatio": 0.30614511663692145,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270839,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 117522,
            "displayValue": "Est savings of 115 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270839,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 117522,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 29,
        "urgency": "medium",
        "totalTransferBytes": 1268552,
        "heavyRequestCount": 4,
        "heavyBytes": 622110,
        "heavyRatio": 0.49040953780373214,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163008,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162246,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160362,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136494,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622110
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622110
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270839,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163008,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.3,
          "displayValue": "4.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 115 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 115 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,140 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,140 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,030 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,030 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.71,
          "displayValue": "4.6 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 125 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 125 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,358 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,358 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/parks-recreation",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/parks-recreation",
      "performanceScore": 0.5,
      "bestPracticesScore": 0.79,
      "transferBytes": 1962430,
      "co2Grams": 0.7517704318019999,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622099,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 69,
            "transferBytes": 314750,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173550,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2211,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973500411&cv=11&fst=1776973500411&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~118579593&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation&rcb=11&frm=0&tiba=Parks%20%26%20Recreation%20%7C%20Programs%20and%20Activities%20%7C%20Facilities%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Parks & Recreation | Programs and Activities | Facilities | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Recreation encompasses parks, trails, facilities, fields, youth programs, recreation programming, culture and heritage, beaches and more.",
          "robots": "",
          "canonical": "https://www.halifax.ca/parks-recreation",
          "ogTitle": "Parks & Recreation",
          "ogDescription": "Recreation encompasses parks, trails, facilities, fields, youth programs, recreation programming, culture and heritage, beaches and more.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/parks-recreation",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 70,
          "tabletSmallTapTargets": 71,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 70,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 71,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 70 small targets on mobile and 71 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:45:12 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 14,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 14
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "14 of 14 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 14,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/14 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 35,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 677098.8999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 425437.89999999997,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "estimatedSavingsBytes": 164515,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 57812,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 415.47 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 160.66 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 56.46 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1247823.9,
        "totalEstimatedBlockingMs": 2189,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 425437.89999999997,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 415 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270815,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 261746,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 256 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2189,
            "displayValue": "Est savings of 2,190 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 164515,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 161 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 57812,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 56 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 38164,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 37 KiB",
            "urgency": "low",
            "sourceAuditId": "offscreen-images"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 415.47 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.47 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 255.61 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 2189 ms."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 160.66 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 56.46 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1276308.4333333336
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.22 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.22 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 13,
        "urgency": "high",
        "transferBytes": 1962430,
        "css": {
          "unusedBytes": 261746,
          "ratio": 0.1333785154120147,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270815,
          "duplicatedBytes": 0,
          "ratio": 0.13799982674541258,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 261746,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270815,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 22,
        "urgency": "high",
        "transferBytes": 1962430,
        "estimatedDeferrableBytes": 570725,
        "renderBlockingMs": 2189,
        "breakdown": {
          "offscreenImageSavings": 38164,
          "unusedJavascriptSavings": 270815,
          "unusedCssSavings": 261746
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 38164,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270815,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 261746,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2189,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 438541,
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/parks-recreation.jpg?itok=cMH_Kz14",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163469,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163002,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 829811,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622099,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173550,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2211,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973500411&cv=11&fst=1776973500411&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~118579593&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation&rcb=11&frm=0&tiba=Parks%20%26%20Recreation%20%7C%20Programs%20and%20Activities%20%7C%20Facilities%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 32,
        "urgency": "high",
        "transferBytes": 1962430,
        "estimatedRedundantBytes": 532561,
        "redundancyRatio": 0.2713783421574273,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270815,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 261746,
            "displayValue": "Est savings of 256 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270815,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 261746,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 34,
        "urgency": "high",
        "totalTransferBytes": 1962430,
        "heavyRequestCount": 6,
        "heavyBytes": 1224109,
        "heavyRatio": 0.623772058111627,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/parks-recreation.jpg?itok=cMH_Kz14",
            "transferSize": 438541,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163469,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163002,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
            "transferSize": 162245,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
            "transferSize": 160361,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
            "transferSize": 136491,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622099
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 438541
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163469
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622099
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 2,
            "transferBytes": 602010
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 38164,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270815,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 438541,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/parks-recreation.jpg?itok=cMH_Kz14",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163469,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163002,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "12.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 12.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.45,
          "displayValue": "6.1 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 6.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 256 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 256 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 415 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 415 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 161 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 161 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 2,190 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 2,190 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,360 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,360 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 37 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 37 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,277 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,277 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/parks-recreation/programs-activities",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/parks-recreation/programs-activities",
      "performanceScore": 0.52,
      "bestPracticesScore": 0.79,
      "transferBytes": 2047917,
      "co2Grams": 0.7845189114437999,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622117,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 48,
            "transferBytes": 404774,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "static.xx.fbcdn.net",
            "resourceType": "script",
            "requestCount": 10,
            "transferBytes": 250558,
            "sampleUrl": "https://static.xx.fbcdn.net/rsrc.php/v4/yM/r/9v0tUotCmWM.js",
            "greenCheck": {
              "hostname": "static.xx.fbcdn.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-22T21:10:08.176146",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.xx.fbcdn.net",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 76,
            "transferBytes": 214993,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "static.xx.fbcdn.net",
            "resourceType": "stylesheet",
            "requestCount": 2,
            "transferBytes": 7436,
            "sampleUrl": "https://static.xx.fbcdn.net/rsrc.php/v5/yO/l/0,cross/4TXMIPOtjRG.css",
            "greenCheck": {
              "hostname": "static.xx.fbcdn.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-22T21:10:08.176146",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.xx.fbcdn.net",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2205,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973519566&cv=11&fst=1776973519566&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fprograms-activities&rcb=10&frm=0&tiba=Programs%20%26%20Activities%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 8,
          "greenCount": 4,
          "notGreenCount": 5,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Programs & Activities | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax Recreation offers hundreds of different programs, sports, day camps, activities, and hobbies for all ages and abilities.",
          "robots": "",
          "canonical": "https://www.halifax.ca/parks-recreation/programs-activities",
          "ogTitle": "Programs & Activities",
          "ogDescription": "Halifax Recreation offers hundreds of different programs, sports, day camps, activities, and hobbies for all ages and abilities.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/parks-recreation/programs-activities",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 76,
          "tabletSmallTapTargets": 81,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 81,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 76 small targets on mobile and 81 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 49,
          "externalScriptsWithoutIntegrity": 49,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:45:34 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "49 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 32,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 13,
          "imagesWithLazy": 4,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 13 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 13,
            "lazyImages": 4,
            "totalIframes": 1,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 4/13 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 16,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 335879,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "estimatedSavingsBytes": 110956,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 127810,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 59076,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 38037,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 108.36 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 124.81 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 57.69 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 37.15 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1062412,
        "totalEstimatedBlockingMs": 730,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 397654,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 388 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 167928,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 164 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 110956,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 108 KiB",
            "urgency": "high",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 127810,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 125 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 82434,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 81 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 78517,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 77 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 59076,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 58 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 38037,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 37 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 730,
            "displayValue": "Est savings of 730 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 388.33 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 163.99 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "high",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 108.36 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 124.81 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 80.50 KB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "medium",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 76.68 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 49,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "49 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 969356.0163873374
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 946.64 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 946.64 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 14,
        "urgency": "high",
        "transferBytes": 2047917,
        "css": {
          "unusedBytes": 167928,
          "ratio": 0.08199941696855878,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 397654,
          "duplicatedBytes": 0,
          "ratio": 0.19417486157886282,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 167928,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 397654,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 2047917,
        "estimatedDeferrableBytes": 648016,
        "renderBlockingMs": 730,
        "breakdown": {
          "offscreenImageSavings": 82434,
          "unusedJavascriptSavings": 397654,
          "unusedCssSavings": 167928
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 82434,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 397654,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 167928,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 730,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from cdn.halifax.ca",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 245972,
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163009,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 85,
        "urgency": "high",
        "providerCount": 6,
        "requestCount": 66,
        "transferBytes": 1311605,
        "notGreenCount": 2,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622117,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 48,
            "transferBytes": 404774,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "static.xx.fbcdn.net",
            "resourceType": "script",
            "requestCount": 10,
            "transferBytes": 250558,
            "sampleUrl": "https://static.xx.fbcdn.net/rsrc.php/v4/yM/r/9v0tUotCmWM.js",
            "greenCheck": {
              "hostname": "static.xx.fbcdn.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-22T21:10:08.176146",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.xx.fbcdn.net",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2205,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973519566&cv=11&fst=1776973519566&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fprograms-activities&rcb=10&frm=0&tiba=Programs%20%26%20Activities%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 6 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "2 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 35,
        "urgency": "high",
        "transferBytes": 2047917,
        "estimatedRedundantBytes": 565582,
        "redundancyRatio": 0.2761742785474216,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 397654,
            "displayValue": "Est savings of 388 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 167928,
            "displayValue": "Est savings of 164 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 397654,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 167928,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 2047917,
        "heavyRequestCount": 6,
        "heavyBytes": 963274,
        "heavyRatio": 0.4703676955657871,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "transferSize": 245972,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163009,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162248,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160363,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136497,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://static.xx.fbcdn.net/rsrc.php/v4/yM/r/9v0tUotCmWM.js",
            "transferSize": 95185,
            "resourceType": "script",
            "mimeType": "application/x-javascript",
            "domain": "static.xx.fbcdn.net"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 6,
            "transferBytes": 963274
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622117
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 245972
          },
          {
            "domain": "static.xx.fbcdn.net",
            "count": 1,
            "transferBytes": 95185
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 82434,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 397654,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 245972,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163009,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "14.7 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 14.7 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 388 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 388 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 164 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 164 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 125 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 125 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 58 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 58 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 730 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 730 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-rel-preconnect",
          "title": "Preconnect to required origins",
          "description": "Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).",
          "score": 0,
          "displayValue": "Est savings of 600 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Preconnect to required origins\n\n- Lighthouse audit: uses-rel-preconnect\n- Current value: Est savings of 600 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nConsider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.72,
          "displayValue": "4.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 81 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 81 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,606 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,606 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/parks-recreation/arts-culture-heritage",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/parks-recreation/arts-culture-heritage",
      "performanceScore": 0.45,
      "bestPracticesScore": 0.79,
      "transferBytes": 1159307,
      "co2Grams": 0.4441089485898001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622115,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 161087,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156809,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11094,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2235,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973542765&cv=11&fst=1776973542765&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938468~117266401~118167060~118463261&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Farts-culture-heritage&rcb=7&frm=0&tiba=Arts%20Culture%20Heritage%20%7C%20Communities%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Arts Culture Heritage | Communities | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Arts, culture, and heritage defines people, neighbourhoods & communities. Learn about community art and public art opportunities.",
          "robots": "",
          "canonical": "https://www.halifax.ca/parks-recreation/arts-culture-heritage",
          "ogTitle": "Arts, Culture & Heritage",
          "ogDescription": "Arts, culture, and heritage defines people, neighbourhoods & communities. Learn about community art and public art opportunities.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/parks-recreation/arts-culture-heritage",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 69,
          "tabletSmallTapTargets": 77,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 69,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 77,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 69 small targets on mobile and 77 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:45:54 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 43,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 9,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 9 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 9,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/9 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 10,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 120470.29999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26341,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 43866.299999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25372,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.72 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 42.84 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 549366.3,
        "totalEstimatedBlockingMs": 1667,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270384,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1667,
            "displayValue": "Est savings of 1,670 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 116403,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 114 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42109,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26341,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 43866.299999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 43 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25372,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.05 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1667 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 113.67 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.12 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 25.72 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 478627.63333333354
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 467.41 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 467.41 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1159307,
        "css": {
          "unusedBytes": 116403,
          "ratio": 0.1004073985579316,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270384,
          "duplicatedBytes": 0,
          "ratio": 0.23322898938762554,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 116403,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270384,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 25,
        "urgency": "high",
        "transferBytes": 1159307,
        "estimatedDeferrableBytes": 428896,
        "renderBlockingMs": 1667,
        "breakdown": {
          "offscreenImageSavings": 42109,
          "unusedJavascriptSavings": 270384,
          "unusedCssSavings": 116403
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42109,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270384,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 116403,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1667,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163007,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 813112,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622115,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156809,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11094,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2235,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973542765&cv=11&fst=1776973542765&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938468~117266401~118167060~118463261&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Farts-culture-heritage&rcb=7&frm=0&tiba=Arts%20Culture%20Heritage%20%7C%20Communities%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 36,
        "urgency": "medium",
        "transferBytes": 1159307,
        "estimatedRedundantBytes": 386787,
        "redundancyRatio": 0.3336363879455571,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270384,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 116403,
            "displayValue": "Est savings of 114 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270384,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 116403,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 31,
        "urgency": "medium",
        "totalTransferBytes": 1159307,
        "heavyRequestCount": 4,
        "heavyBytes": 622115,
        "heavyRatio": 0.5366266226288636,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163007,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162248,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160363,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136497,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622115
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622115
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42109,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270384,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163007,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "9.7 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 9.7 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 114 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 114 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 43 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 43 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,670 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,670 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.8,
          "displayValue": "4.0 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,259 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,259 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/parks-recreation/events",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/parks-recreation/events",
      "performanceScore": 0.35,
      "bestPracticesScore": 0.75,
      "transferBytes": 2246040,
      "co2Grams": 0.860416147656,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622113,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 403369,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 73,
            "transferBytes": 163357,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11098,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2197,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973562298&cv=11&fst=1776973562298&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fevents&rcb=10&frm=0&tiba=Halifax%20Events%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Halifax Events | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Looking to attend an event, plan one of your own or support local events? Explore everything you need to know about Halifax’s vibrant event scene.",
          "robots": "",
          "canonical": "https://www.halifax.ca/parks-recreation/events",
          "ogTitle": "Events",
          "ogDescription": "Looking to attend an event, plan one of your own or support local events? Explore everything you need to know about Halifax’s vibrant event scene.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/parks-recreation/events",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 76,
          "tabletSmallTapTargets": 80,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 80,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 76 small targets on mobile and 80 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:46:15 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 17,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 17
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "17 of 17 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 17,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/17 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 35,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 776401.35,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 504297.35,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "estimatedSavingsBytes": 115882,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 129831,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26391,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 492.48 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 113.17 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 126.79 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.77 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 2041641.35,
        "totalEstimatedBlockingMs": 680,
        "opportunities": [
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 504442,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 493 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 504297.35,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 492 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 397487,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 388 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 246456,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 241 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 115882,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 113 KiB",
            "urgency": "high",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 129831,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 127 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 116855,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 114 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26391,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 680,
            "displayValue": "Est savings of 680 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          }
        ],
        "recommendations": [
          {
            "title": "Right-size images for viewport",
            "urgency": "high",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 492.62 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 492.48 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 388.17 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 240.68 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "high",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 113.17 KB."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 126.79 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1369217.200000001
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.31 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.31 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 12,
        "urgency": "high",
        "transferBytes": 2246040,
        "css": {
          "unusedBytes": 116855,
          "ratio": 0.052027123292550444,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 397487,
          "duplicatedBytes": 0,
          "ratio": 0.17697236024291643,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 116855,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 397487,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 2246040,
        "estimatedDeferrableBytes": 760798,
        "renderBlockingMs": 680,
        "breakdown": {
          "offscreenImageSavings": 246456,
          "unusedJavascriptSavings": 397487,
          "unusedCssSavings": 116855
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 246456,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 397487,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 116855,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 680,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 328358,
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-10/cc_events_webbanner-attend-page.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from cdn.halifax.ca",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 245985,
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163005,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 1059636,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622113,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 403369,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11098,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2197,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973562298&cv=11&fst=1776973562298&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fevents&rcb=10&frm=0&tiba=Halifax%20Events%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 30,
        "urgency": "medium",
        "transferBytes": 2246040,
        "estimatedRedundantBytes": 514342,
        "redundancyRatio": 0.22899948353546687,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 397487,
            "displayValue": "Est savings of 388 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 116855,
            "displayValue": "Est savings of 114 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 397487,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 116855,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 33,
        "urgency": "high",
        "totalTransferBytes": 2246040,
        "heavyRequestCount": 6,
        "heavyBytes": 1196456,
        "heavyRatio": 0.5326957667717405,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-10/cc_events_webbanner-attend-page.png",
            "transferSize": 328358,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "transferSize": 245985,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163005,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162248,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160363,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136497,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 5,
            "transferBytes": 868098
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 328358
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622113
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 2,
            "transferBytes": 574343
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 246456,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 397487,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 328358,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-10/cc_events_webbanner-attend-page.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 245985,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163005,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "10.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 10.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.49,
          "displayValue": "5.9 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 388 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 388 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 114 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 114 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 492 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 492 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 127 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 127 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 680 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 680 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,220 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,220 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 241 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 241 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,373 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,373 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/parks-recreation/facility-rentals-bookings-field-conditions",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/parks-recreation/facility-rentals-bookings-field-conditions",
      "performanceScore": 0.41,
      "bestPracticesScore": 0.79,
      "transferBytes": 2257605,
      "co2Grams": 0.8648464840470002,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622119,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 48,
            "transferBytes": 405118,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "script",
            "requestCount": 13,
            "transferBytes": 375916,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en.TuA4apAhcxY.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hvmKL99r1sZiHZ0LsigQ5SZYAuAw/dti=1/m=_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 188218,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "apis.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 116278,
            "sampleUrl": "https://apis.google.com/js/api.js",
            "greenCheck": {
              "hostname": "apis.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/apis.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 42007,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/ss/k=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AABwAM4AAAE/d=1/ed=1/rs=AA4Gz9ifutIKqFdv4btOxUVY8-4VlehtiQ/m=mainview,_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11103,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2236,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973582770&cv=11&fst=1776973582770&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Ffacility-rentals-bookings-field-conditions&rcb=16&frm=0&tiba=Facility%20Rentals%2C%20bookings%20and%20Field%20Conditions%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 9,
          "greenCount": 7,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Facility Rentals, bookings and Field Conditions | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Rental facilities and sports fields in Halifax Regional Municipality.",
          "robots": "",
          "canonical": "https://www.halifax.ca/parks-recreation/facility-rentals-bookings-field-conditions",
          "ogTitle": "Facility Rentals, Bookings, & Field Conditions",
          "ogDescription": "Rental facilities and sports fields in Halifax Regional Municipality.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/parks-recreation/facility-rentals-bookings-field-conditions",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 75,
          "tabletSmallTapTargets": 79,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 75,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 79,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 75 small targets on mobile and 79 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 53,
          "externalScriptsWithoutIntegrity": 53,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:46:36 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "53 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 39,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 11,
          "imagesWithLazy": 2,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 11 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 11,
            "lazyImages": 2,
            "totalIframes": 1,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 2/11 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 10,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 223006.44999999998,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "estimatedSavingsBytes": 115879,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 32222,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 49534.44999999999,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25371,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 113.16 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.47 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 48.37 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 897912.45,
        "totalEstimatedBlockingMs": 684,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 396709,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 387 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 142230,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 139 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 115879,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 113 KiB",
            "urgency": "high",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 78517,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 77 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 57450,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 56 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 32222,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 31 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 684,
            "displayValue": "Est savings of 680 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 49534.44999999999,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 48 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25371,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 387.41 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 138.90 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "high",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 113.16 KB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "medium",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 76.68 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 56.10 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 31.47 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 53,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "53 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 852547.258333333
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 832.57 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 832.57 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 13,
        "urgency": "high",
        "transferBytes": 2257605,
        "css": {
          "unusedBytes": 142230,
          "ratio": 0.06300039200834513,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 396709,
          "duplicatedBytes": 0,
          "ratio": 0.1757211735445306,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 142230,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 396709,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 14,
        "urgency": "high",
        "transferBytes": 2257605,
        "estimatedDeferrableBytes": 596389,
        "renderBlockingMs": 684,
        "breakdown": {
          "offscreenImageSavings": 57450,
          "unusedJavascriptSavings": 396709,
          "unusedCssSavings": 142230
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 57450,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 396709,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 142230,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 684,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from cdn.halifax.ca",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 245960,
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.gstatic.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 194328,
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en.TuA4apAhcxY.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9haMAs0bVgvcC8c3crM4zZTMlg8LQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163010,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 7,
        "requestCount": 71,
        "transferBytes": 1553629,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622119,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 48,
            "transferBytes": 405118,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "script",
            "requestCount": 13,
            "transferBytes": 375916,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en.TuA4apAhcxY.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hvmKL99r1sZiHZ0LsigQ5SZYAuAw/dti=1/m=_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "apis.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 116278,
            "sampleUrl": "https://apis.google.com/js/api.js",
            "greenCheck": {
              "hostname": "apis.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/apis.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11103,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2236,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973582770&cv=11&fst=1776973582770&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Ffacility-rentals-bookings-field-conditions&rcb=16&frm=0&tiba=Facility%20Rentals%2C%20bookings%20and%20Field%20Conditions%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 7 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 33,
        "urgency": "high",
        "transferBytes": 2257605,
        "estimatedRedundantBytes": 538939,
        "redundancyRatio": 0.23872156555287571,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 396709,
            "displayValue": "Est savings of 387 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 142230,
            "displayValue": "Est savings of 139 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 396709,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 142230,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 38,
        "urgency": "high",
        "totalTransferBytes": 2257605,
        "heavyRequestCount": 10,
        "heavyBytes": 1340813,
        "heavyRatio": 0.593909474863849,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "transferSize": 245960,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en.TuA4apAhcxY.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9haMAs0bVgvcC8c3crM4zZTMlg8LQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "transferSize": 194328,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.gstatic.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163010,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162248,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160364,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136497,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.lb.en.PJsh2cctCQI.O/m=client/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_QlMhY2cycn60Rs8eI1WInRwuahw/cb=gapi.loaded_0?le=scs,fedcm_migration_mod",
            "transferSize": 110445,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "apis.google.com"
          },
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en.TuA4apAhcxY.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hvmKL99r1sZiHZ0LsigQ5SZYAuAw/dti=1/m=_b,_tp",
            "transferSize": 73676,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.gstatic.com"
          },
          {
            "url": "https://fonts.gstatic.com/s/googlesans/v58/4UaRrENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iq2vgCIhM907w.woff2",
            "transferSize": 52278,
            "resourceType": "font",
            "mimeType": "font/woff2",
            "domain": "fonts.gstatic.com"
          },
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/ss/k=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AABwAM4AAAE/d=1/ed=1/rs=AA4Gz9ifutIKqFdv4btOxUVY8-4VlehtiQ/m=mainview,_b,_tp",
            "transferSize": 42007,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.gstatic.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 8,
            "transferBytes": 1246528
          },
          {
            "resourceType": "font",
            "count": 1,
            "transferBytes": 52278
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 42007
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622119
          },
          {
            "domain": "www.gstatic.com",
            "count": 3,
            "transferBytes": 310011
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 245960
          },
          {
            "domain": "apis.google.com",
            "count": 1,
            "transferBytes": 110445
          },
          {
            "domain": "fonts.gstatic.com",
            "count": 1,
            "transferBytes": 52278
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 57450,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 396709,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 245960,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.gstatic.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 194328,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en.TuA4apAhcxY.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9haMAs0bVgvcC8c3crM4zZTMlg8LQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163010,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.09,
          "displayValue": "6.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 6.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 387 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 387 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 139 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 139 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 680 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 680 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.51,
          "displayValue": "5.7 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.7 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 48 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 48 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 56 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 56 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,349 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,349 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/parks-recreation/halifax-youth",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/parks-recreation/halifax-youth",
      "performanceScore": 0.48,
      "bestPracticesScore": 0.75,
      "transferBytes": 1421564,
      "co2Grams": 0.5445747273096,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622119,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 73,
            "transferBytes": 202854,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156142,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2223,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973606541&cv=11&fst=1776973606541&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fhalifax-youth&rcb=17&frm=0&tiba=Youth%20%7C%20Programs%2C%20Services%20%26%20Resources%20for%20youth%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Youth | Programs, Services & Resources for youth | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Youth - Recreation has many programs for youth that are focused on providing services to young people ages 13 - 24 years old.",
          "robots": "",
          "canonical": "https://www.halifax.ca/parks-recreation/halifax-youth",
          "ogTitle": "Youth Programs & Services",
          "ogDescription": "Youth - Recreation has many programs for youth that are focused on providing services to young people ages 13 - 24 years old.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/parks-recreation/halifax-youth",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 74,
          "tabletSmallTapTargets": 78,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 74,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 78,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 74 small targets on mobile and 78 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:47:00 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 20,
        "urgency": "low",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 16,
          "imagesWithLazy": 8,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 16,
            "lazyImages": 8,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 8/16 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 24,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 341603.94999999995,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 195869.94999999998,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 85498,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 35345,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 191.28 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 83.49 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.52 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 810774.95,
        "totalEstimatedBlockingMs": 1533,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270880,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 156176,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 153 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1533,
            "displayValue": "Est savings of 1,530 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 195869.94999999998,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 191 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 85498,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 83 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42115,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 35345,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 35 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.53 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 152.52 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1533 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 191.28 KB."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 83.49 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 738444.3000000009
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 721.14 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 721.14 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 15,
        "urgency": "high",
        "transferBytes": 1421564,
        "css": {
          "unusedBytes": 156176,
          "ratio": 0.10986209555109724,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270880,
          "duplicatedBytes": 0,
          "ratio": 0.1905506892408643,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 156176,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270880,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 24,
        "urgency": "high",
        "transferBytes": 1421564,
        "estimatedDeferrableBytes": 469171,
        "renderBlockingMs": 1533,
        "breakdown": {
          "offscreenImageSavings": 42115,
          "unusedJavascriptSavings": 270880,
          "unusedCssSavings": 156176
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42115,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270880,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 156176,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1533,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163010,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 812465,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622119,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156142,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2223,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973606541&cv=11&fst=1776973606541&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266401~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fhalifax-youth&rcb=17&frm=0&tiba=Youth%20%7C%20Programs%2C%20Services%20%26%20Resources%20for%20youth%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 34,
        "urgency": "medium",
        "transferBytes": 1421564,
        "estimatedRedundantBytes": 427056,
        "redundancyRatio": 0.30041278479196154,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270880,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 156176,
            "displayValue": "Est savings of 153 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270880,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 156176,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 26,
        "urgency": "medium",
        "totalTransferBytes": 1421564,
        "heavyRequestCount": 4,
        "heavyBytes": 622119,
        "heavyRatio": 0.43762996249201586,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163010,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162248,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160364,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136497,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622119
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622119
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42115,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270880,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163010,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "11.1 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 11.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 265 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 153 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 153 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 191 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 191 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 83 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 83 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,530 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,530 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,190 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,190 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.57,
          "displayValue": "5.4 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.4 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,291 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,291 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/parks-recreation/parks-trails-gardens",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/parks-recreation/parks-trails-gardens",
      "performanceScore": 0.45,
      "bestPracticesScore": 0.79,
      "transferBytes": 1759628,
      "co2Grams": 0.6740807577192,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622119,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 402068,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 190570,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2213,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973628189&cv=11&fst=1776973628189&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fparks-trails-gardens&rcb=11&frm=0&tiba=Parks%2C%20Trails%20%26%20Gardens%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Parks, Trails & Gardens | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Get outside and enjoy one of the municipality's many parks, trails, and gardens.",
          "robots": "",
          "canonical": "https://www.halifax.ca/parks-recreation/parks-trails-gardens",
          "ogTitle": "Parks, Trails, & Gardens",
          "ogDescription": "Get outside and enjoy one of the municipality's many parks, trails, and gardens.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/parks-recreation/parks-trails-gardens",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 73,
          "tabletSmallTapTargets": 79,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 73,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 79,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 73 small targets on mobile and 79 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:47:21 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 29,
        "urgency": "low",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 14,
          "imagesWithLazy": 5,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 14 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 14,
            "lazyImages": 5,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 5/14 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 16,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 275898.7,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "estimatedSavingsBytes": 115882,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 93609.7,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 32439,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 33968,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "high",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 113.17 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 91.42 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.68 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 33.17 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 952201.7,
        "totalEstimatedBlockingMs": 880,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 397033,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 388 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 143174,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 140 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 115882,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 113 KiB",
            "urgency": "high",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 93609.7,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 91 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 78517,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 77 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 57579,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 56 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 32439,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 32 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 880,
            "displayValue": "Est savings of 880 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 33968,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 33 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 387.73 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 139.82 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "high",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 113.17 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 91.42 KB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "medium",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 76.68 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 56.23 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 957695.4916666668
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 935.25 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 935.25 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1759628,
        "css": {
          "unusedBytes": 143174,
          "ratio": 0.08136606146299104,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 397033,
          "duplicatedBytes": 0,
          "ratio": 0.22563462277254057,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 143174,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 397033,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 18,
        "urgency": "high",
        "transferBytes": 1759628,
        "estimatedDeferrableBytes": 597786,
        "renderBlockingMs": 880,
        "breakdown": {
          "offscreenImageSavings": 57579,
          "unusedJavascriptSavings": 397033,
          "unusedCssSavings": 143174
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 57579,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 397033,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 143174,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 880,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from cdn.halifax.ca",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 245985,
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163010,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 1058381,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622119,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 402068,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2213,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973628189&cv=11&fst=1776973628189&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fparks-trails-gardens&rcb=11&frm=0&tiba=Parks%2C%20Trails%20%26%20Gardens%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 37,
        "urgency": "high",
        "transferBytes": 1759628,
        "estimatedRedundantBytes": 540207,
        "redundancyRatio": 0.3070006842355316,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 397033,
            "displayValue": "Est savings of 388 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 143174,
            "displayValue": "Est savings of 140 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 397033,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 143174,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1759628,
        "heavyRequestCount": 5,
        "heavyBytes": 868104,
        "heavyRatio": 0.4933451843230501,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "transferSize": 245985,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163010,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162248,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160364,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136497,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 5,
            "transferBytes": 868104
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622119
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 245985
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 57579,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 397033,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 245985,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://cdn.halifax.ca/libraries/bsky-embed/dist/bsky-embed.es.js?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163010,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "13.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 13.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 388 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 388 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 140 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 140 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 91 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 91 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 880 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 880 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 920 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 920 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.61,
          "displayValue": "5.1 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 33 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 33 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 56 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 56 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,593 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,593 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/parks-recreation/programs-activities/outdoor-recreation/emera-oval",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/parks-recreation/programs-activities/outdoor-recreation/emera-oval",
      "performanceScore": 0.49,
      "bestPracticesScore": 0.79,
      "transferBytes": 2434327,
      "co2Grams": 0.9325453952178001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622120,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "script",
            "requestCount": 13,
            "transferBytes": 375663,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hV1py28wMG7hGK3zb8SMYyBRuNdQ/dti=1/m=_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 75,
            "transferBytes": 216850,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 49,
            "transferBytes": 158853,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "apis.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 116278,
            "sampleUrl": "https://apis.google.com/js/api.js",
            "greenCheck": {
              "hostname": "apis.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/apis.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 42007,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/ss/k=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AABwAM4AAAE/d=1/ed=1/rs=AA4Gz9ifutIKqFdv4btOxUVY8-4VlehtiQ/m=mainview,_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2225,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973648309&cv=11&fst=1776973648309&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fprograms-activities%2Foutdoor-recreation%2Femera-oval&rcb=12&frm=0&tiba=Emera%20Oval%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 9,
          "greenCount": 7,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Emera Oval | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Get outside on the Emera Oval year-round! Inline skating in the summer and ice skating in the winter.",
          "robots": "",
          "canonical": "https://www.halifax.ca/parks-recreation/programs-activities/outdoor-recreation/emera-oval",
          "ogTitle": "Emera Oval",
          "ogDescription": "Get outside on the Emera Oval year-round! Inline skating in the summer and ice skating in the winter.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/parks-recreation/programs-activities/outdoor-recreation/emera-oval",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 38,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 70,
          "tabletSmallTapTargets": 84,
          "fixedWidthOffenders": 4,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 2,
            "smallTapTargets": 70,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 2,
            "smallTapTargets": 84,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 70 small targets on mobile and 84 on tablet."
          },
          {
            "title": "Refactor fixed-width components",
            "urgency": "medium",
            "detail": "4 element(s) exceeded viewport width in tested layouts; use responsive component constraints."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 54,
          "externalScriptsWithoutIntegrity": 54,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:47:44 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "54 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 24,
        "urgency": "low",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 30,
          "imagesWithLazy": 13,
          "imagesWithoutLazy": 17
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "17 of 30 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 30,
            "lazyImages": 13,
            "totalIframes": 1,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 13/30 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 19,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 459218,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 334909,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 61126,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 38292,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 327.06 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 59.69 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 37.39 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1317978,
        "totalEstimatedBlockingMs": 1747,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 334909,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 327 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269257,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 263 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 243239,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 238 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 177352,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 173 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 168912,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 165 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1747,
            "displayValue": "Est savings of 1,750 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 61126,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 60 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 38292,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 37 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 327.06 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 262.95 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 237.54 KB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "high",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 173.20 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 164.95 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1747 ms."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 54,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "54 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1136033.6743055556
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.08 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.08 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 10,
        "urgency": "high",
        "transferBytes": 2434327,
        "css": {
          "unusedBytes": 168912,
          "ratio": 0.06938755557490839,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269257,
          "duplicatedBytes": 0,
          "ratio": 0.11060839402430322,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 168912,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269257,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 23,
        "urgency": "high",
        "transferBytes": 2434327,
        "estimatedDeferrableBytes": 681408,
        "renderBlockingMs": 1747,
        "breakdown": {
          "offscreenImageSavings": 243239,
          "unusedJavascriptSavings": 269257,
          "unusedCssSavings": 168912
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 243239,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269257,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 168912,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1747,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.gstatic.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 194075,
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9gO0fTMLCZ6EAbjKHcCJyfDXSspOQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163011,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 7,
        "requestCount": 72,
        "transferBytes": 1307120,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622120,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "script",
            "requestCount": 13,
            "transferBytes": 375663,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hV1py28wMG7hGK3zb8SMYyBRuNdQ/dti=1/m=_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 49,
            "transferBytes": 158853,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "apis.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 116278,
            "sampleUrl": "https://apis.google.com/js/api.js",
            "greenCheck": {
              "hostname": "apis.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/apis.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2225,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973648309&cv=11&fst=1776973648309&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fprograms-activities%2Foutdoor-recreation%2Femera-oval&rcb=12&frm=0&tiba=Emera%20Oval%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 7 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 27,
        "urgency": "medium",
        "transferBytes": 2434327,
        "estimatedRedundantBytes": 438169,
        "redundancyRatio": 0.1799959495992116,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269257,
            "displayValue": "Est savings of 263 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 168912,
            "displayValue": "Est savings of 165 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269257,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 168912,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 34,
        "urgency": "high",
        "totalTransferBytes": 2434327,
        "heavyRequestCount": 10,
        "heavyBytes": 1218111,
        "heavyRatio": 0.5003892246193712,
        "heavyRequests": [
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9gO0fTMLCZ6EAbjKHcCJyfDXSspOQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "transferSize": 194075,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.gstatic.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163011,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162248,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160364,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136497,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://cdn.halifax.ca/webcam/webcamImage1.jpg?1776195766",
            "transferSize": 123517,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.lb.en.PJsh2cctCQI.O/m=client/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_QlMhY2cycn60Rs8eI1WInRwuahw/cb=gapi.loaded_0?le=scs,fedcm_migration_mod",
            "transferSize": 110445,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "apis.google.com"
          },
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hV1py28wMG7hGK3zb8SMYyBRuNdQ/dti=1/m=_b,_tp",
            "transferSize": 73669,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.gstatic.com"
          },
          {
            "url": "https://fonts.gstatic.com/s/googlesans/v58/4UaRrENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iq2vgCIhM907w.woff2",
            "transferSize": 52278,
            "resourceType": "font",
            "mimeType": "font/woff2",
            "domain": "fonts.gstatic.com"
          },
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/ss/k=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AABwAM4AAAE/d=1/ed=1/rs=AA4Gz9ifutIKqFdv4btOxUVY8-4VlehtiQ/m=mainview,_b,_tp",
            "transferSize": 42007,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.gstatic.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 7,
            "transferBytes": 1000309
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 123517
          },
          {
            "resourceType": "font",
            "count": 1,
            "transferBytes": 52278
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 42007
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622120
          },
          {
            "domain": "www.gstatic.com",
            "count": 3,
            "transferBytes": 309751
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 123517
          },
          {
            "domain": "apis.google.com",
            "count": 1,
            "transferBytes": 110445
          },
          {
            "domain": "fonts.gstatic.com",
            "count": 1,
            "transferBytes": 52278
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 243239,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269257,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.gstatic.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 194075,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9gO0fTMLCZ6EAbjKHcCJyfDXSspOQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163011,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 165 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 165 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,750 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,750 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.7,
          "displayValue": "3.3 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 3.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.55,
          "displayValue": "5.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 263 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 263 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 327 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 327 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 60 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 60 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 238 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 238 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,745 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,745 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/parks-recreation/programs-activities/recreation-activities",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/parks-recreation/programs-activities/recreation-activities",
      "performanceScore": 0.66,
      "bestPracticesScore": 0.75,
      "transferBytes": 1669764,
      "co2Grams": 0.6396555307896001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622127,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 203485,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156090,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2229,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973672290&cv=11&fst=1776973672290&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fprograms-activities%2Frecreation-activities&rcb=9&frm=0&tiba=Recreation%20Activities%20%7C%20Program%20Registration%20%7C%20myREC%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Recreation Activities | Program Registration | myREC | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Ready to get active? We offer lots of cost-effective ways for you and your family/friends to participate in our programs & use our facilities.",
          "robots": "",
          "canonical": "https://www.halifax.ca/parks-recreation/programs-activities/recreation-activities",
          "ogTitle": "Recreation Activities",
          "ogDescription": "Ready to get active? We offer lots of cost-effective ways for you and your family/friends to participate in our programs & use our facilities.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/parks-recreation/programs-activities/recreation-activities",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 74,
          "tabletSmallTapTargets": 84,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 74,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 84,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 74 small targets on mobile and 84 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:48:04 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 17,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 17
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "17 of 17 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 17,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/17 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 33,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 557480.5999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 423853.5999999999,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 73367,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 35369,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 413.92 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 71.65 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.54 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1274702.5999999999,
        "totalEstimatedBlockingMs": 1174,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 423853.5999999999,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 414 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 289588,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 283 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 271242,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 156392,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 153 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1174,
            "displayValue": "Est savings of 1,170 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 73367,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 72 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 35369,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 35 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 413.92 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 282.80 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.88 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 152.73 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1174 ms."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 71.65 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 981670.3583333329
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 958.66 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 958.66 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 13,
        "urgency": "high",
        "transferBytes": 1669764,
        "css": {
          "unusedBytes": 156392,
          "ratio": 0.09366114013716909,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 271242,
          "duplicatedBytes": 0,
          "ratio": 0.16244331534276701,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 156392,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 271242,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 25,
        "urgency": "high",
        "transferBytes": 1669764,
        "estimatedDeferrableBytes": 717222,
        "renderBlockingMs": 1174,
        "breakdown": {
          "offscreenImageSavings": 289588,
          "unusedJavascriptSavings": 271242,
          "unusedCssSavings": 156392
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 289588,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 271242,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 156392,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1174,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163018,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 812427,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622127,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156090,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2229,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973672290&cv=11&fst=1776973672290&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fprograms-activities%2Frecreation-activities&rcb=9&frm=0&tiba=Recreation%20Activities%20%7C%20Program%20Registration%20%7C%20myREC%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 34,
        "urgency": "medium",
        "transferBytes": 1669764,
        "estimatedRedundantBytes": 427634,
        "redundancyRatio": 0.2561044554799361,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 271242,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 156392,
            "displayValue": "Est savings of 153 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 271242,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 156392,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 33,
        "urgency": "medium",
        "totalTransferBytes": 1669764,
        "heavyRequestCount": 5,
        "heavyBytes": 869882,
        "heavyRatio": 0.5209610459921282,
        "heavyRequests": [
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163018,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162248,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160364,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136497,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622127
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622127
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 289588,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 271242,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163018,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.45,
          "displayValue": "4.2 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 153 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 153 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,170 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,170 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.89,
          "displayValue": "3.4 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.4 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 265 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 414 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 414 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 72 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 72 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 283 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 283 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,740 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,740 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/parks-recreation/programs-activities/recreation-centres-your-community",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/parks-recreation/programs-activities/recreation-centres-your-community",
      "performanceScore": 0.53,
      "bestPracticesScore": 0.79,
      "transferBytes": 1203848,
      "co2Grams": 0.46117177722720004,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622106,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 177559,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156073,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2243,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973691396&cv=11&fst=1776973691396&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fprograms-activities%2Frecreation-centres-your-community&rcb=2&frm=0&tiba=Rec%20Centres%20%7C%20Recreation%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Rec Centres | Recreation | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Rec centres in the Halifax Regional Municipality",
          "robots": "",
          "canonical": "https://www.halifax.ca/parks-recreation/programs-activities/recreation-centres-your-community",
          "ogTitle": "Recreation Centres in your Community",
          "ogDescription": "Rec centres in the Halifax Regional Municipality",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/parks-recreation/programs-activities/recreation-centres-your-community",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 68,
          "tabletSmallTapTargets": 80,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 68,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 80,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 68 small targets on mobile and 80 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:48:23 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 11,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 11
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "11 of 11 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 11,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/11 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 12,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 148550.6,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 73638.6,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29488,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25456,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "low",
            "estimatedSavingsBytes": 19968,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 71.91 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.80 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.86 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "low",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 19.50 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 591914.6,
        "totalEstimatedBlockingMs": 1016,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270921,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 130249,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 127 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1016,
            "displayValue": "Est savings of 1,020 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 73638.6,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 72 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42194,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 29488,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25456,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 19968,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 20 KiB",
            "urgency": "low",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.57 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 127.20 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1016 ms."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 71.91 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.21 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 28.80 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 518299.25833333324
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 506.15 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 506.15 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1203848,
        "css": {
          "unusedBytes": 130249,
          "ratio": 0.1081938915876423,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270921,
          "duplicatedBytes": 0,
          "ratio": 0.22504585296482613,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 130249,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270921,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 20,
        "urgency": "high",
        "transferBytes": 1203848,
        "estimatedDeferrableBytes": 443364,
        "renderBlockingMs": 1016,
        "breakdown": {
          "offscreenImageSavings": 42194,
          "unusedJavascriptSavings": 270921,
          "unusedCssSavings": 130249
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42194,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270921,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 130249,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1016,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163006,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 812403,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622106,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156073,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2243,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973691396&cv=11&fst=1776973691396&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fprograms-activities%2Frecreation-centres-your-community&rcb=2&frm=0&tiba=Rec%20Centres%20%7C%20Recreation%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 36,
        "urgency": "medium",
        "transferBytes": 1203848,
        "estimatedRedundantBytes": 401170,
        "redundancyRatio": 0.3332397445524684,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270921,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 130249,
            "displayValue": "Est savings of 127 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270921,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 130249,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1203848,
        "heavyRequestCount": 4,
        "heavyBytes": 622106,
        "heavyRatio": 0.5167645749297254,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163006,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
            "transferSize": 162232,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
            "transferSize": 160359,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
            "transferSize": 136509,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622106
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622106
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42194,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270921,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163006,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.03,
          "displayValue": "7.7 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 7.7 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 265 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 127 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 127 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,020 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,020 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.88,
          "displayValue": "3.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 72 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 72 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,626 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,626 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/myrec",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/parks-recreation/programs-activities/recreation-activities",
      "performanceScore": 0.6,
      "bestPracticesScore": 0.75,
      "transferBytes": 1853632,
      "co2Grams": 0.7100919416448,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622120,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 367021,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 176015,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2232,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973710950&cv=11&fst=1776973710950&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fprograms-activities%2Frecreation-activities&rcb=8&frm=0&tiba=Recreation%20Activities%20%7C%20Program%20Registration%20%7C%20myREC%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Recreation Activities | Program Registration | myREC | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Ready to get active? We offer lots of cost-effective ways for you and your family/friends to participate in our programs & use our facilities.",
          "robots": "",
          "canonical": "https://www.halifax.ca/parks-recreation/programs-activities/recreation-activities",
          "ogTitle": "Recreation Activities",
          "ogDescription": "Ready to get active? We offer lots of cost-effective ways for you and your family/friends to participate in our programs & use our facilities.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/parks-recreation/programs-activities/recreation-activities",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 74,
          "tabletSmallTapTargets": 84,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 74,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 84,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 74 small targets on mobile and 84 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:48:44 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 17,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 17
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "17 of 17 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 17,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/17 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 32,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 595962.5999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 423853.5999999999,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 73367,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 69408,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 413.92 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 71.65 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 67.78 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1470074.5999999999,
        "totalEstimatedBlockingMs": 2429,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 423853.5999999999,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 414 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 313787,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 306 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 289588,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 283 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270737,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2429,
            "displayValue": "Est savings of 2,430 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 73367,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 72 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 69408,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 68 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 413.92 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 306.43 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 282.80 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.39 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 2429 ms."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 71.65 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1163414.0999999999
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.11 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.11 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 15,
        "urgency": "high",
        "transferBytes": 1853632,
        "css": {
          "unusedBytes": 313787,
          "ratio": 0.16928225235645478,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270737,
          "duplicatedBytes": 0,
          "ratio": 0.1460575777716397,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 313787,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270737,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 28,
        "urgency": "high",
        "transferBytes": 1853632,
        "estimatedDeferrableBytes": 874112,
        "renderBlockingMs": 2429,
        "breakdown": {
          "offscreenImageSavings": 289588,
          "unusedJavascriptSavings": 270737,
          "unusedCssSavings": 313787
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 289588,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270737,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 313787,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2429,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163439,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163011,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 832348,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622120,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 176015,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2232,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973710950&cv=11&fst=1776973710950&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fprograms-activities%2Frecreation-activities&rcb=8&frm=0&tiba=Recreation%20Activities%20%7C%20Program%20Registration%20%7C%20myREC%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 35,
        "urgency": "high",
        "transferBytes": 1853632,
        "estimatedRedundantBytes": 584524,
        "redundancyRatio": 0.31533983012809447,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 313787,
            "displayValue": "Est savings of 306 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270737,
            "displayValue": "Est savings of 264 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 313787,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270737,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 34,
        "urgency": "medium",
        "totalTransferBytes": 1853632,
        "heavyRequestCount": 6,
        "heavyBytes": 1033314,
        "heavyRatio": 0.5574536909159963,
        "heavyRequests": [
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163439,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163011,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162248,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160364,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136497,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622120
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163439
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622120
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163439
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 289588,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270737,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163439,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163011,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.44,
          "displayValue": "4.2 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 306 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 306 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 2,430 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 2,430 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.53,
          "displayValue": "5.6 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 414 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 414 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 72 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 72 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 283 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 283 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,740 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,740 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/city-hall",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/city-hall",
      "performanceScore": 0.38,
      "bestPracticesScore": 0.79,
      "transferBytes": 2175939,
      "co2Grams": 0.8335617584346001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622094,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 69,
            "transferBytes": 313035,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173487,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2198,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973732957&cv=11&fst=1776973732957&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall&rcb=16&frm=0&tiba=City%20Hall%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "City Hall | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Information about City Hall such as Regional Council, Districts, Elections, Committees and more.",
          "robots": "",
          "canonical": "https://www.halifax.ca/city-hall",
          "ogTitle": "City Hall",
          "ogDescription": "Information about City Hall such as Regional Council, Districts, Elections, Committees and more.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/city-hall",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 76,
          "tabletSmallTapTargets": 77,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 77,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 76 small targets on mobile and 77 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:49:05 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 20,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 20
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "20 of 20 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 20,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/20 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 40,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 880288.55,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 563972.55,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "estimatedSavingsBytes": 229214,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 57768,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 550.75 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 223.84 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 56.41 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1454703.55,
        "totalEstimatedBlockingMs": 1443,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 563972.55,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 551 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270587,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 261720,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 256 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 229214,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 224 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1443,
            "displayValue": "Est savings of 1,440 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 57768,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 56 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42108,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 550.75 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.25 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 255.59 KB."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "high",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 223.84 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1443 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 56.41 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1487079.2500000014
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.42 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.42 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 12,
        "urgency": "high",
        "transferBytes": 2175939,
        "css": {
          "unusedBytes": 261720,
          "ratio": 0.12027910708893953,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270587,
          "duplicatedBytes": 0,
          "ratio": 0.12435412941263518,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 261720,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270587,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 2175939,
        "estimatedDeferrableBytes": 574415,
        "renderBlockingMs": 1443,
        "breakdown": {
          "offscreenImageSavings": 42108,
          "unusedJavascriptSavings": 270587,
          "unusedCssSavings": 261720
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42108,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270587,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 261720,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1443,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 492516,
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/city-hall.jpg?itok=GOFfNBGW",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163439,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 829760,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622094,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173487,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2198,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973732957&cv=11&fst=1776973732957&bg=ffffff&guid=ON&async=1&gtm=45be64m0h1z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall&rcb=16&frm=0&tiba=City%20Hall%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 31,
        "urgency": "high",
        "transferBytes": 2175939,
        "estimatedRedundantBytes": 532307,
        "redundancyRatio": 0.24463323650157473,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270587,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 261720,
            "displayValue": "Est savings of 256 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270587,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 261720,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 32,
        "urgency": "high",
        "totalTransferBytes": 2175939,
        "heavyRequestCount": 6,
        "heavyBytes": 1278049,
        "heavyRatio": 0.5873551602319734,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/city-hall.jpg?itok=GOFfNBGW",
            "transferSize": 492516,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163439,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162998,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0h1",
            "transferSize": 162241,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0h1",
            "transferSize": 160362,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0h1",
            "transferSize": 136493,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622094
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 492516
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163439
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "cdn.halifax.ca",
            "count": 2,
            "transferBytes": 655955
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622094
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42108,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270587,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 492516,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/styles/background_desktop_full/public/page-images/category/2026/city-hall.jpg?itok=GOFfNBGW",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163439,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162998,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "12.3 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 12.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 256 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 256 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 551 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 551 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 224 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 224 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,440 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,440 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.59,
          "displayValue": "5.2 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,439 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,439 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/city-hall/budget-finances",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/city-hall/budget-finances",
      "performanceScore": 0.53,
      "bestPracticesScore": 0.79,
      "transferBytes": 1191805,
      "co2Grams": 0.456558327927,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622120,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 75,
            "transferBytes": 215731,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158720,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2227,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973753148&cv=11&fst=1776973753148&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~117384406~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fbudget-finances&rcb=8&frm=0&tiba=Budget%20and%20Finances%20%7C%20Annual%20Budget%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Budget and Finances | Annual Budget | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Budget and finances",
          "robots": "",
          "canonical": "https://www.halifax.ca/city-hall/budget-finances",
          "ogTitle": "Budget & Finances",
          "ogDescription": "Budget and finances",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/city-hall/budget-finances",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 75,
          "tabletSmallTapTargets": 80,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 75,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 80,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 75 small targets on mobile and 80 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:49:24 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 128411.25,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 38019,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 40072.25,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25429,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 37.13 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 39.13 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.83 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 609330.25,
        "totalEstimatedBlockingMs": 1030,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270777,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 167939,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 164 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1030,
            "displayValue": "Est savings of 1,030 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42203,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 38019,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 37 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 40072.25,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 39 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25429,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.43 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 164.00 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1030 ms."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.21 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 37.13 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 511570.79999999993
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 499.58 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 499.58 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 18,
        "urgency": "high",
        "transferBytes": 1191805,
        "css": {
          "unusedBytes": 167939,
          "ratio": 0.14091147461203804,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270777,
          "duplicatedBytes": 0,
          "ratio": 0.22719908038647263,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 167939,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270777,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 1191805,
        "estimatedDeferrableBytes": 480919,
        "renderBlockingMs": 1030,
        "breakdown": {
          "offscreenImageSavings": 42203,
          "unusedJavascriptSavings": 270777,
          "unusedCssSavings": 167939
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42203,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270777,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 167939,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1030,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163011,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 815048,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622120,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158720,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2227,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973753148&cv=11&fst=1776973753148&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~117384406~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fbudget-finances&rcb=8&frm=0&tiba=Budget%20and%20Finances%20%7C%20Annual%20Budget%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 38,
        "urgency": "medium",
        "transferBytes": 1191805,
        "estimatedRedundantBytes": 438716,
        "redundancyRatio": 0.36811055499851064,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270777,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 167939,
            "displayValue": "Est savings of 164 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270777,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 167939,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1191805,
        "heavyRequestCount": 4,
        "heavyBytes": 622120,
        "heavyRatio": 0.5219981456698034,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163011,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162248,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160364,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136497,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622120
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622120
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42203,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270777,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163011,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.01,
          "displayValue": "8.7 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 8.7 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 164 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 164 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,030 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,030 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 770 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 770 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.72,
          "displayValue": "4.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 39 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 39 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,220 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,220 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/city-hall/mayor-andy-fillmore",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/city-hall/mayor-andy-fillmore",
      "performanceScore": 0.41,
      "bestPracticesScore": 0.79,
      "transferBytes": 1198602,
      "co2Grams": 0.4591621322028,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 201163,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156846,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2222,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973771855&cv=11&fst=1776973771855&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938468~117266400~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fmayor-andy-fillmore&rcb=15&frm=0&tiba=Mayor%20Andy%20Fillmore%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Mayor Andy Fillmore | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax Regional Municipality Mayor Andy Fillmore",
          "robots": "",
          "canonical": "https://www.halifax.ca/city-hall/mayor-andy-fillmore",
          "ogTitle": "Mayor Andy Fillmore",
          "ogDescription": "Halifax Regional Municipality Mayor Andy Fillmore",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/city-hall/mayor-andy-fillmore",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 78,
          "tabletSmallTapTargets": 86,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 78,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 86,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 78 small targets on mobile and 86 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:49:43 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 13,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 155051.9,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 59651.9,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 35051,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 35458,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 58.25 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.23 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 34.63 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 621827.9,
        "totalEstimatedBlockingMs": 317,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270013,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 154651,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 151 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 59651.9,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 58 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 35051,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 34 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 317,
            "displayValue": "Est savings of 320 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 35458,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 35 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.68 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 151.03 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 58.25 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 34.23 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 517205.4500000001
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 505.08 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 505.08 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1198602,
        "css": {
          "unusedBytes": 154651,
          "ratio": 0.12902614879668148,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270013,
          "duplicatedBytes": 0,
          "ratio": 0.22527327670068964,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 154651,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270013,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 14,
        "urgency": "high",
        "transferBytes": 1198602,
        "estimatedDeferrableBytes": 466776,
        "renderBlockingMs": 317,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270013,
          "unusedCssSavings": 154651
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270013,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 154651,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 317,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 813173,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156846,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2222,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973771855&cv=11&fst=1776973771855&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938468~117266400~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fmayor-andy-fillmore&rcb=15&frm=0&tiba=Mayor%20Andy%20Fillmore%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 39,
        "urgency": "medium",
        "transferBytes": 1198602,
        "estimatedRedundantBytes": 424664,
        "redundancyRatio": 0.3542994254973711,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270013,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 154651,
            "displayValue": "Est savings of 151 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270013,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 154651,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1198602,
        "heavyRequestCount": 4,
        "heavyBytes": 622124,
        "heavyRatio": 0.5190413498392293,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622124
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622124
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270013,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.01,
          "displayValue": "8.6 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 8.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 151 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 151 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 58 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 58 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 35 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 35 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 320 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 320 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.89,
          "displayValue": "3.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,279 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,279 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/city-hall/districts-councillors",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/city-hall/districts-councillors",
      "performanceScore": 0.61,
      "bestPracticesScore": 0.79,
      "transferBytes": 1186845,
      "co2Grams": 0.45465824418300005,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622110,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 157443,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 69,
            "transferBytes": 147640,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2221,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973790546&cv=11&fst=1776973790546&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401~117884344&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fdistricts-councillors&rcb=6&frm=0&tiba=Districts%20and%20Councillors%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Districts and Councillors | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Regional Council is comprised of Mayor Andy Fillmore and 16 Councillors. Together they represent the main legislative and governing body for Halifax Regional Municipality and its 16 districts.",
          "robots": "",
          "canonical": "https://www.halifax.ca/city-hall/districts-councillors",
          "ogTitle": "Districts & Councillors",
          "ogDescription": "Regional Council is comprised of Mayor Andy Fillmore and 16 Councillors. Together they represent the main legislative and governing body for Halifax Regional Municipality and its 16 districts.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/city-hall/districts-councillors",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 85,
          "tabletSmallTapTargets": 89,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 85,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 89,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 85 small targets on mobile and 89 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:50:03 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 20,
        "urgency": "low",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 25,
          "imagesWithLazy": 16,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 25,
            "lazyImages": 16,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 16/25 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 13,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 158220.40000000002,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 73231.40000000001,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 23449,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 36649,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 71.52 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.90 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 35.79 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 641264.4,
        "totalEstimatedBlockingMs": 1415,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270677,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1415,
            "displayValue": "Est savings of 1,420 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 108476,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 106 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 103891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 101 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 73231.40000000001,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 72 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 23449,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 23 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 36649,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 36 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.33 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1415 ms."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 105.93 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 101.46 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 71.52 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 506438.92500000016
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 494.57 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 494.57 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1186845,
        "css": {
          "unusedBytes": 103891,
          "ratio": 0.08753544060092093,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270677,
          "duplicatedBytes": 0,
          "ratio": 0.22806432179433708,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 103891,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270677,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 26,
        "urgency": "high",
        "transferBytes": 1186845,
        "estimatedDeferrableBytes": 483044,
        "renderBlockingMs": 1415,
        "breakdown": {
          "offscreenImageSavings": 108476,
          "unusedJavascriptSavings": 270677,
          "unusedCssSavings": 103891
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 108476,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270677,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 103891,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1415,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163007,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 813755,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622110,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 157443,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2221,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973790546&cv=11&fst=1776973790546&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401~117884344&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fdistricts-councillors&rcb=6&frm=0&tiba=Districts%20and%20Councillors%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 35,
        "urgency": "medium",
        "transferBytes": 1186845,
        "estimatedRedundantBytes": 374568,
        "redundancyRatio": 0.315599762395258,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270677,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 103891,
            "displayValue": "Est savings of 101 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270677,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 103891,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 31,
        "urgency": "medium",
        "totalTransferBytes": 1186845,
        "heavyRequestCount": 4,
        "heavyBytes": 622110,
        "heavyRatio": 0.5241712270768297,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163007,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
            "transferSize": 162233,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
            "transferSize": 160360,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
            "transferSize": 136510,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622110
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622110
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 108476,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270677,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163007,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 101 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 101 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,420 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,420 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.64,
          "displayValue": "3.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 3.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.86,
          "displayValue": "3.6 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 72 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 72 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 36 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 36 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 106 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 106 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,309 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,309 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/city-hall/regional-council",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/city-hall/regional-council",
      "performanceScore": 0.45,
      "bestPracticesScore": 0.79,
      "transferBytes": 1811660,
      "co2Grams": 0.6940132491240001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622111,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "script",
            "requestCount": 13,
            "transferBytes": 373674,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hV1py28wMG7hGK3zb8SMYyBRuNdQ/dti=1/m=_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 201305,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158155,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "apis.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 116268,
            "sampleUrl": "https://apis.google.com/js/api.js",
            "greenCheck": {
              "hostname": "apis.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/apis.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 42007,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/ss/k=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AABwAM4AAAE/d=1/ed=1/rs=AA4Gz9ifutIKqFdv4btOxUVY8-4VlehtiQ/m=mainview,_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11107,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2213,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973810069&cv=11&fst=1776973810069&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938469~117266401~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fregional-council&rcb=2&frm=0&tiba=Regional%20Council%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 9,
          "greenCount": 7,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Regional Council | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax Regional Council meeting information, live web and audiocast, and how to communicate with council.",
          "robots": "",
          "canonical": "https://www.halifax.ca/city-hall/regional-council",
          "ogTitle": "Regional Council",
          "ogDescription": "Halifax Regional Council meeting information, live web and audiocast, and how to communicate with council.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/city-hall/regional-council",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 79,
          "tabletSmallTapTargets": 84,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 79,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 84,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 79 small targets on mobile and 84 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 55,
          "externalScriptsWithoutIntegrity": 55,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:50:22 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "55 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 1,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 7,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 126842.6,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 35073,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 41504.6,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.25 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 40.53 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 594440.6,
        "totalEstimatedBlockingMs": 887,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270727,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 154759,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 151 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 35073,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 34 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 887,
            "displayValue": "Est savings of 890 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 41504.6,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.38 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 151.13 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 34.25 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "medium",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 887 ms."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 55,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "55 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 500715.0250000001
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 488.98 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 488.98 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 12,
        "urgency": "high",
        "transferBytes": 1811660,
        "css": {
          "unusedBytes": 154759,
          "ratio": 0.08542386540520848,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270727,
          "duplicatedBytes": 0,
          "ratio": 0.14943587648896592,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 154759,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270727,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1811660,
        "estimatedDeferrableBytes": 467598,
        "renderBlockingMs": 887,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270727,
          "unusedCssSavings": 154759
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270727,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 154759,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 887,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.gstatic.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 194075,
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9gO0fTMLCZ6EAbjKHcCJyfDXSspOQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163008,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 7,
        "requestCount": 70,
        "transferBytes": 1304387,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622111,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "script",
            "requestCount": 13,
            "transferBytes": 373674,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hV1py28wMG7hGK3zb8SMYyBRuNdQ/dti=1/m=_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 158155,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "apis.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 116268,
            "sampleUrl": "https://apis.google.com/js/api.js",
            "greenCheck": {
              "hostname": "apis.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/apis.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11107,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2213,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973810069&cv=11&fst=1776973810069&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938469~117266401~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fregional-council&rcb=2&frm=0&tiba=Regional%20Council%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 7 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 33,
        "urgency": "medium",
        "transferBytes": 1811660,
        "estimatedRedundantBytes": 425486,
        "redundancyRatio": 0.2348597418941744,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270727,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 154759,
            "displayValue": "Est savings of 151 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270727,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 154759,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 37,
        "urgency": "high",
        "totalTransferBytes": 1811660,
        "heavyRequestCount": 9,
        "heavyBytes": 1094573,
        "heavyRatio": 0.6041823520969718,
        "heavyRequests": [
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9gO0fTMLCZ6EAbjKHcCJyfDXSspOQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "transferSize": 194075,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.gstatic.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163008,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
            "transferSize": 162233,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
            "transferSize": 160360,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
            "transferSize": 136510,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.lb.en.HLcjcliCxoY.O/m=client/rt=j/sv=1/d=1/ed=1/rs=AHpOoo-EKlLcELGvY6Qdg_kTBmN3Ra8MLw/cb=gapi.loaded_0?le=scs,fedcm_migration_mod",
            "transferSize": 110433,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "apis.google.com"
          },
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hV1py28wMG7hGK3zb8SMYyBRuNdQ/dti=1/m=_b,_tp",
            "transferSize": 73669,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.gstatic.com"
          },
          {
            "url": "https://fonts.gstatic.com/s/googlesans/v58/4UaRrENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iq2vgCIhM907w.woff2",
            "transferSize": 52278,
            "resourceType": "font",
            "mimeType": "font/woff2",
            "domain": "fonts.gstatic.com"
          },
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/ss/k=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AABwAM4AAAE/d=1/ed=1/rs=AA4Gz9ifutIKqFdv4btOxUVY8-4VlehtiQ/m=mainview,_b,_tp",
            "transferSize": 42007,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.gstatic.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 7,
            "transferBytes": 1000288
          },
          {
            "resourceType": "font",
            "count": 1,
            "transferBytes": 52278
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 42007
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622111
          },
          {
            "domain": "www.gstatic.com",
            "count": 3,
            "transferBytes": 309751
          },
          {
            "domain": "apis.google.com",
            "count": 1,
            "transferBytes": 110433
          },
          {
            "domain": "fonts.gstatic.com",
            "count": 1,
            "transferBytes": 52278
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270727,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.gstatic.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 194075,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9gO0fTMLCZ6EAbjKHcCJyfDXSspOQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163008,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.36,
          "displayValue": "4.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 151 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 151 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 890 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 890 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.82,
          "displayValue": "3.9 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 41 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,206 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,206 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/city-hall/agendas-meetings-reports",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/city-hall/agendas-meetings-reports",
      "performanceScore": 0.62,
      "bestPracticesScore": 0.79,
      "transferBytes": 6758040,
      "co2Grams": 2.5888794244560005,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "cdn.syncfusion.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 3533648,
            "sampleUrl": "https://cdn.syncfusion.com/ej2/20.1.58/dist/ej2.min.js",
            "greenCheck": {
              "hostname": "cdn.syncfusion.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:44.844195",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.syncfusion.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622121,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "script",
            "requestCount": 13,
            "transferBytes": 373674,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hV1py28wMG7hGK3zb8SMYyBRuNdQ/dti=1/m=_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "pub-halifax.escribemeetings.com",
            "resourceType": "script",
            "requestCount": 6,
            "transferBytes": 254816,
            "sampleUrl": "https://pub-halifax.escribemeetings.com/bundles/modernizr?v=inCVuEFe6J4Q07A0AcRsbJic_UE5MwpRMNGcOtk94TE1",
            "greenCheck": {
              "hostname": "pub-halifax.escribemeetings.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-23T19:50:46.476785",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/pub-halifax.escribemeetings.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 76,
            "transferBytes": 207141,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 65,
            "transferBytes": 195107,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.syncfusion.com",
            "resourceType": "stylesheet",
            "requestCount": 6,
            "transferBytes": 177930,
            "sampleUrl": "https://cdn.syncfusion.com/ej2/20.1.58/ej2-base/styles/material.css",
            "greenCheck": {
              "hostname": "cdn.syncfusion.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:44.844195",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.syncfusion.com",
              "error": null
            }
          },
          {
            "hostname": "apis.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 116268,
            "sampleUrl": "https://apis.google.com/js/api.js",
            "greenCheck": {
              "hostname": "apis.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/apis.google.com",
              "error": null
            }
          },
          {
            "hostname": "go.playerzero.app",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 102230,
            "sampleUrl": "https://go.playerzero.app/record/6880f5f3fcc3eb359abc739e",
            "greenCheck": {
              "hostname": "go.playerzero.app",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:44.920802",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/go.playerzero.app",
              "error": null
            }
          },
          {
            "hostname": "pub-halifax.escribemeetings.com",
            "resourceType": "stylesheet",
            "requestCount": 3,
            "transferBytes": 71645,
            "sampleUrl": "https://pub-halifax.escribemeetings.com/Content/css?v=y9uK_ceFCy45Y9o-TkZcQepZ0THYo7k4dhCGMioBdfs1",
            "greenCheck": {
              "hostname": "pub-halifax.escribemeetings.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-23T19:50:46.476785",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/pub-halifax.escribemeetings.com",
              "error": null
            }
          },
          {
            "hostname": "www.datadoghq-browser-agent.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 60661,
            "sampleUrl": "https://www.datadoghq-browser-agent.com/us3/v6/datadog-rum.js",
            "greenCheck": {
              "hostname": "www.datadoghq-browser-agent.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T04:58:17.329313",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.datadoghq-browser-agent.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 42007,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/ss/k=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AABwAM4AAAE/d=1/ed=1/rs=AA4Gz9ifutIKqFdv4btOxUVY8-4VlehtiQ/m=mainview,_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "code.jquery.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 31010,
            "sampleUrl": "https://code.jquery.com/jquery-3.4.1.min.js",
            "greenCheck": {
              "hostname": "code.jquery.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T02:11:25.445753",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/code.jquery.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.datatables.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 29733,
            "sampleUrl": "https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js",
            "greenCheck": {
              "hostname": "cdn.datatables.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:53",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.datatables.net",
              "error": null
            }
          },
          {
            "hostname": "stackpath.bootstrapcdn.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 25332,
            "sampleUrl": "https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css",
            "greenCheck": {
              "hostname": "stackpath.bootstrapcdn.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:50:38",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/stackpath.bootstrapcdn.com",
              "error": null
            }
          },
          {
            "hostname": "cdnjs.cloudflare.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 22980,
            "sampleUrl": "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js",
            "greenCheck": {
              "hostname": "cdnjs.cloudflare.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:34",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdnjs.cloudflare.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "maxst.icons8.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 17337,
            "sampleUrl": "https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/css/line-awesome.min.css",
            "greenCheck": {
              "hostname": "maxst.icons8.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:45.933494",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/maxst.icons8.com",
              "error": null
            }
          },
          {
            "hostname": "stackpath.bootstrapcdn.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 17082,
            "sampleUrl": "https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js",
            "greenCheck": {
              "hostname": "stackpath.bootstrapcdn.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:50:38",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/stackpath.bootstrapcdn.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11066,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.jsdelivr.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 10303,
            "sampleUrl": "https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js",
            "greenCheck": {
              "hostname": "cdn.jsdelivr.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:39",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.jsdelivr.net",
              "error": null
            }
          },
          {
            "hostname": "maxcdn.icons8.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 6581,
            "sampleUrl": "https://maxcdn.icons8.com/fonts/line-awesome/1.1/css/line-awesome.min.css",
            "greenCheck": {
              "hostname": "maxcdn.icons8.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:46.249405",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/maxcdn.icons8.com",
              "error": null
            }
          },
          {
            "hostname": "fonts.googleapis.com",
            "resourceType": "stylesheet",
            "requestCount": 6,
            "transferBytes": 6321,
            "sampleUrl": "https://fonts.googleapis.com/css?family=Public%20Sans",
            "greenCheck": {
              "hostname": "fonts.googleapis.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/fonts.googleapis.com",
              "error": null
            }
          },
          {
            "hostname": "maxcdn.bootstrapcdn.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 5607,
            "sampleUrl": "https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css",
            "greenCheck": {
              "hostname": "maxcdn.bootstrapcdn.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:15",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/maxcdn.bootstrapcdn.com",
              "error": null
            }
          },
          {
            "hostname": "cdnjs.cloudflare.com",
            "resourceType": "stylesheet",
            "requestCount": 2,
            "transferBytes": 5422,
            "sampleUrl": "https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.0.1/fullcalendar.min.css",
            "greenCheck": {
              "hostname": "cdnjs.cloudflare.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:34",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdnjs.cloudflare.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.datatables.net",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 2337,
            "sampleUrl": "https://cdn.datatables.net/1.11.5/css/jquery.dataTables.min.css",
            "greenCheck": {
              "hostname": "cdn.datatables.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:53",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.datatables.net",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2219,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973830610&cv=11&fst=1776973830610&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fagendas-meetings-reports&rcb=14&frm=0&tiba=Agendas%20%7C%20Meetings%20%7C%20Reports%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 27,
          "greenCount": 18,
          "notGreenCount": 10,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 40,
        "urgency": "medium",
        "pageElementOccurrences": 8,
        "uniqueElementsAssessed": 7,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "no-form|input|radio|c-search-meetings-form__radio|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "radio",
            "fieldName": "c-search-meetings-form__radio",
            "formContext": "no-form",
            "hasLabel": true,
            "hasValidationRule": false,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 50,
              "urgency": "medium",
              "issues": [
                "No explicit validation rule",
                "No error messaging hook"
              ],
              "recommendations": [
                "Define validation constraints (required, pattern, min/max, or semantic input type).",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|get|/city-hall/agendas-meetings-reports|select|select|category|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "select",
            "fieldName": "category",
            "formContext": "form|get|/city-hall/agendas-meetings-reports",
            "hasLabel": true,
            "hasValidationRule": false,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 50,
              "urgency": "medium",
              "issues": [
                "No explicit validation rule",
                "No error messaging hook"
              ],
              "recommendations": [
                "Define validation constraints (required, pattern, min/max, or semantic input type).",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|get|/city-hall/agendas-meetings-reports|input|date|start|off|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "date",
            "fieldName": "start",
            "formContext": "form|get|/city-hall/agendas-meetings-reports",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 20,
              "urgency": "low",
              "issues": [
                "No error messaging hook"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|get|/city-hall/agendas-meetings-reports|input|date|end|off|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "date",
            "fieldName": "end",
            "formContext": "form|get|/city-hall/agendas-meetings-reports",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 20,
              "urgency": "low",
              "issues": [
                "No error messaging hook"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "search|get|/search/content|select|select|filter_by|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "select",
            "fieldName": "filter_by",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": false,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 50,
              "urgency": "medium",
              "issues": [
                "No explicit validation rule",
                "No error messaging hook"
              ],
              "recommendations": [
                "Define validation constraints (required, pattern, min/max, or semantic input type).",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "search|get|/search/content|input|text|keys|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "text",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": false,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 60,
              "urgency": "high",
              "issues": [
                "No explicit validation rule",
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Define validation constraints (required, pattern, min/max, or semantic input type).",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "7 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "No explicit validation rule",
            "urgency": "medium",
            "detail": "4 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "2 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Agendas | Meetings | Reports | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "You can browse or search for meeting information using the table on this page.",
          "robots": "",
          "canonical": "https://www.halifax.ca/city-hall/agendas-meetings-reports",
          "ogTitle": "Agendas, meetings & reports",
          "ogDescription": "You can browse or search for meeting information using the table on this page.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/city-hall/agendas-meetings-reports",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 107,
          "tabletSmallTapTargets": 120,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 107,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 120,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 107 small targets on mobile and 120 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 73,
          "externalScriptsWithoutIntegrity": 73,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:50:52 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "73 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 9,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 9 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 9,
            "lazyImages": 0,
            "totalIframes": 2,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/9 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 5,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 358501.8,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 266529.8,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 35508,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 31057,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25407,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.28 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.68 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 30.33 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1073205.8,
        "totalEstimatedBlockingMs": 1704,
        "opportunities": [
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 289636,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 283 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 268122,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 262 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 266529.8,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 260 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 156946,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 153 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1704,
            "displayValue": "Est savings of 1,700 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 35508,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 35 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 31057,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25407,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 282.85 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 261.84 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 260.28 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 153.27 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1704 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 34.68 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 73,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "73 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 950549.0341666667
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 928.27 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 928.27 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 5,
        "urgency": "high",
        "transferBytes": 6758040,
        "css": {
          "unusedBytes": 156946,
          "ratio": 0.023223597374386656,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 268122,
          "duplicatedBytes": 0,
          "ratio": 0.039674521014968836,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 156946,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 268122,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 18,
        "urgency": "high",
        "transferBytes": 6758040,
        "estimatedDeferrableBytes": 714704,
        "renderBlockingMs": 1704,
        "breakdown": {
          "offscreenImageSavings": 289636,
          "unusedJavascriptSavings": 268122,
          "unusedCssSavings": 156946
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 289636,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 268122,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 156946,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1704,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from cdn.syncfusion.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 3533648,
            "url": "https://cdn.syncfusion.com/ej2/20.1.58/dist/ej2.min.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.gstatic.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 194075,
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9gO0fTMLCZ6EAbjKHcCJyfDXSspOQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from pub-halifax.escribemeetings.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 172076,
            "url": "https://pub-halifax.escribemeetings.com/bundles/MeetingList?v=e4Ptuni7g8Q8v8c3RRk44Y6R6z_V_2NH3cMLZjoVIUU1",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 90,
        "urgency": "high",
        "providerCount": 16,
        "requestCount": 104,
        "transferBytes": 5403777,
        "notGreenCount": 5,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "cdn.syncfusion.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 3533648,
            "sampleUrl": "https://cdn.syncfusion.com/ej2/20.1.58/dist/ej2.min.js",
            "greenCheck": {
              "hostname": "cdn.syncfusion.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:44.844195",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.syncfusion.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622121,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "script",
            "requestCount": 13,
            "transferBytes": 373674,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hV1py28wMG7hGK3zb8SMYyBRuNdQ/dti=1/m=_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "pub-halifax.escribemeetings.com",
            "resourceType": "script",
            "requestCount": 6,
            "transferBytes": 254816,
            "sampleUrl": "https://pub-halifax.escribemeetings.com/bundles/modernizr?v=inCVuEFe6J4Q07A0AcRsbJic_UE5MwpRMNGcOtk94TE1",
            "greenCheck": {
              "hostname": "pub-halifax.escribemeetings.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-23T19:50:46.476785",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/pub-halifax.escribemeetings.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 65,
            "transferBytes": 195107,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "apis.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 116268,
            "sampleUrl": "https://apis.google.com/js/api.js",
            "greenCheck": {
              "hostname": "apis.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/apis.google.com",
              "error": null
            }
          },
          {
            "hostname": "go.playerzero.app",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 102230,
            "sampleUrl": "https://go.playerzero.app/record/6880f5f3fcc3eb359abc739e",
            "greenCheck": {
              "hostname": "go.playerzero.app",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:44.920802",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/go.playerzero.app",
              "error": null
            }
          },
          {
            "hostname": "www.datadoghq-browser-agent.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 60661,
            "sampleUrl": "https://www.datadoghq-browser-agent.com/us3/v6/datadog-rum.js",
            "greenCheck": {
              "hostname": "www.datadoghq-browser-agent.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T04:58:17.329313",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.datadoghq-browser-agent.com",
              "error": null
            }
          },
          {
            "hostname": "code.jquery.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 31010,
            "sampleUrl": "https://code.jquery.com/jquery-3.4.1.min.js",
            "greenCheck": {
              "hostname": "code.jquery.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T02:11:25.445753",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/code.jquery.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.datatables.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 29733,
            "sampleUrl": "https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js",
            "greenCheck": {
              "hostname": "cdn.datatables.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:53",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.datatables.net",
              "error": null
            }
          },
          {
            "hostname": "cdnjs.cloudflare.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 22980,
            "sampleUrl": "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js",
            "greenCheck": {
              "hostname": "cdnjs.cloudflare.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:34",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdnjs.cloudflare.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "stackpath.bootstrapcdn.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 17082,
            "sampleUrl": "https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js",
            "greenCheck": {
              "hostname": "stackpath.bootstrapcdn.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:50:38",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/stackpath.bootstrapcdn.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11066,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.jsdelivr.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 10303,
            "sampleUrl": "https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js",
            "greenCheck": {
              "hostname": "cdn.jsdelivr.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:39",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.jsdelivr.net",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2219,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973830610&cv=11&fst=1776973830610&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fagendas-meetings-reports&rcb=14&frm=0&tiba=Agendas%20%7C%20Meetings%20%7C%20Reports%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 16 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "5 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 21,
        "urgency": "medium",
        "transferBytes": 6758040,
        "estimatedRedundantBytes": 425068,
        "redundancyRatio": 0.0628981183893555,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 268122,
            "displayValue": "Est savings of 262 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 156946,
            "displayValue": "Est savings of 153 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 268122,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 156946,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 44,
        "urgency": "high",
        "totalTransferBytes": 6758040,
        "heavyRequestCount": 18,
        "heavyBytes": 5516234,
        "heavyRatio": 0.8162476102538606,
        "heavyRequests": [
          {
            "url": "https://cdn.syncfusion.com/ej2/20.1.58/dist/ej2.min.js",
            "transferSize": 3533648,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "cdn.syncfusion.com"
          },
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9gO0fTMLCZ6EAbjKHcCJyfDXSspOQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "transferSize": 194075,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.gstatic.com"
          },
          {
            "url": "https://pub-halifax.escribemeetings.com/bundles/MeetingList?v=e4Ptuni7g8Q8v8c3RRk44Y6R6z_V_2NH3cMLZjoVIUU1",
            "transferSize": 172076,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "pub-halifax.escribemeetings.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162246,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.lb.en.HLcjcliCxoY.O/m=client/rt=j/sv=1/d=1/ed=1/rs=AHpOoo-EKlLcELGvY6Qdg_kTBmN3Ra8MLw/cb=gapi.loaded_0?le=scs,fedcm_migration_mod",
            "transferSize": 110433,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "apis.google.com"
          },
          {
            "url": "https://go.playerzero.app/record/6880f5f3fcc3eb359abc739e",
            "transferSize": 102230,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "go.playerzero.app"
          },
          {
            "url": "https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/fonts/la-solid-900.woff2",
            "transferSize": 97517,
            "resourceType": "font",
            "mimeType": "font/woff2",
            "domain": "maxst.icons8.com"
          },
          {
            "url": "https://cdn.syncfusion.com/ej2/20.1.58/ej2-base/styles/material.css",
            "transferSize": 92152,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.syncfusion.com"
          },
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hV1py28wMG7hGK3zb8SMYyBRuNdQ/dti=1/m=_b,_tp",
            "transferSize": 73669,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.gstatic.com"
          },
          {
            "url": "https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/fonts/fontawesome-webfont.woff?v=4.2.0",
            "transferSize": 66006,
            "resourceType": "font",
            "mimeType": "font/woff",
            "domain": "maxcdn.bootstrapcdn.com"
          },
          {
            "url": "https://cdn.syncfusion.com/ej2/ej2-inputs/styles/material.css",
            "transferSize": 56292,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.syncfusion.com"
          },
          {
            "url": "https://pub-halifax.escribemeetings.com/Content/css?v=y9uK_ceFCy45Y9o-TkZcQepZ0THYo7k4dhCGMioBdfs1",
            "transferSize": 53975,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "pub-halifax.escribemeetings.com"
          },
          {
            "url": "https://fonts.gstatic.com/s/googlesans/v58/4UaRrENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iq2vgCIhM907w.woff2",
            "transferSize": 52278,
            "resourceType": "font",
            "mimeType": "font/woff2",
            "domain": "fonts.gstatic.com"
          },
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/ss/k=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AABwAM4AAAE/d=1/ed=1/rs=AA4Gz9ifutIKqFdv4btOxUVY8-4VlehtiQ/m=mainview,_b,_tp",
            "transferSize": 42007,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.gstatic.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 10,
            "transferBytes": 4808252
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "resourceType": "stylesheet",
            "count": 4,
            "transferBytes": 244426
          },
          {
            "resourceType": "font",
            "count": 3,
            "transferBytes": 215801
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "cdn.syncfusion.com",
            "count": 3,
            "transferBytes": 3682092
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622121
          },
          {
            "domain": "www.gstatic.com",
            "count": 3,
            "transferBytes": 309751
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "domain": "pub-halifax.escribemeetings.com",
            "count": 2,
            "transferBytes": 226051
          },
          {
            "domain": "apis.google.com",
            "count": 1,
            "transferBytes": 110433
          },
          {
            "domain": "go.playerzero.app",
            "count": 1,
            "transferBytes": 102230
          },
          {
            "domain": "maxst.icons8.com",
            "count": 1,
            "transferBytes": 97517
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 289636,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 268122,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from cdn.syncfusion.com",
            "urgency": "high",
            "estimatedSavingsBytes": 3533648,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://cdn.syncfusion.com/ej2/20.1.58/dist/ej2.min.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.gstatic.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 194075,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9gO0fTMLCZ6EAbjKHcCJyfDXSspOQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.31,
          "displayValue": "4.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 262 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 262 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 153 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 153 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,700 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,700 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.6,
          "displayValue": "5.2 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 260 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 260 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 283 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 283 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 6,600 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 6,600 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,502 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,502 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/city-hall/legislation-by-laws",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/city-hall/legislation-by-laws",
      "performanceScore": 0.55,
      "bestPracticesScore": 0.79,
      "transferBytes": 1169451,
      "co2Grams": 0.44799492631140003,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 64,
            "transferBytes": 193799,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 73,
            "transferBytes": 178819,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11081,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2222,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973863564&cv=11&fst=1776973863564&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401~118167058~118463261&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Flegislation-by-laws&rcb=17&frm=0&tiba=Legislation%20and%20By-laws%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 44,
        "urgency": "medium",
        "pageElementOccurrences": 6,
        "uniqueElementsAssessed": 5,
        "reusedFromCacheCount": 2,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "no-form|input|radio|c-search-legislation-form__radio|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "radio",
            "fieldName": "c-search-legislation-form__radio",
            "formContext": "no-form",
            "hasLabel": true,
            "hasValidationRule": false,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 50,
              "urgency": "medium",
              "issues": [
                "No explicit validation rule",
                "No error messaging hook"
              ],
              "recommendations": [
                "Define validation constraints (required, pattern, min/max, or semantic input type).",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|get|/city-hall/legislation-by-laws|input|text|number|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "number",
            "formContext": "form|get|/city-hall/legislation-by-laws",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|get|/city-hall/legislation-by-laws|select|select|category|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "select",
            "fieldName": "category",
            "formContext": "form|get|/city-hall/legislation-by-laws",
            "hasLabel": true,
            "hasValidationRule": false,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 50,
              "urgency": "medium",
              "issues": [
                "No explicit validation rule",
                "No error messaging hook"
              ],
              "recommendations": [
                "Define validation constraints (required, pattern, min/max, or semantic input type).",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "search|get|/search/content|input|text|keys|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "text",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": false,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 60,
              "urgency": "high",
              "issues": [
                "No explicit validation rule",
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Define validation constraints (required, pattern, min/max, or semantic input type).",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "5 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "3 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "No explicit validation rule",
            "urgency": "medium",
            "detail": "3 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Legislation and By-laws | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The Halifax Regional Municipality Charter is the primary legislation under which the municipality operates. This section includes links to all Administrative Orders and By-laws for the entire municipality, including those from pre-amalgamation which are still in effect.",
          "robots": "",
          "canonical": "https://www.halifax.ca/city-hall/legislation-by-laws",
          "ogTitle": "Legislation & By-laws",
          "ogDescription": "The Halifax Regional Municipality Charter is the primary legislation under which the municipality operates. This section includes links to all Administrative Orders and By-laws for the entire municipality, including those from pre-amalgamation which are still in effect.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/city-hall/legislation-by-laws",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 172,
          "tabletSmallTapTargets": 168,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 172,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 168,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 172 small targets on mobile and 168 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 65,
          "externalScriptsWithoutIntegrity": 65,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:51:15 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "65 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 9,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 110165.04999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29576,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30325.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25373,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.88 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.61 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 554233.05,
        "totalEstimatedBlockingMs": 483,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 271239,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 130718,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 128 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42111,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 29576,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 483,
            "displayValue": "Est savings of 480 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30325.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25373,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.88 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 127.65 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.12 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 28.88 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "medium",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 483 ms."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 65,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "65 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 485793.41666666645
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 474.41 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 474.41 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1169451,
        "css": {
          "unusedBytes": 130718,
          "ratio": 0.1117772356430496,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 271239,
          "duplicatedBytes": 0,
          "ratio": 0.23193703712254723,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 130718,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 271239,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 15,
        "urgency": "high",
        "transferBytes": 1169451,
        "estimatedDeferrableBytes": 444068,
        "renderBlockingMs": 483,
        "breakdown": {
          "offscreenImageSavings": 42111,
          "unusedJavascriptSavings": 271239,
          "unusedCssSavings": 130718
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42111,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 271239,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 130718,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 483,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 72,
        "transferBytes": 850085,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 64,
            "transferBytes": 193799,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11081,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2222,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973863564&cv=11&fst=1776973863564&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401~118167058~118463261&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Flegislation-by-laws&rcb=17&frm=0&tiba=Legislation%20and%20By-laws%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 39,
        "urgency": "medium",
        "transferBytes": 1169451,
        "estimatedRedundantBytes": 401957,
        "redundancyRatio": 0.34371427276559685,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 271239,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 130718,
            "displayValue": "Est savings of 128 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 271239,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 130718,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 31,
        "urgency": "medium",
        "totalTransferBytes": 1169451,
        "heavyRequestCount": 4,
        "heavyBytes": 622124,
        "heavyRatio": 0.5319795356966645,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622124
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622124
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42111,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 271239,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.19,
          "displayValue": "5.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 5.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 128 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 128 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 480 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 480 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,200 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,200 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.77,
          "displayValue": "4.2 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 265 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,590 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,590 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/city-hall/elections/2024-election-results",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/city-hall/elections/2024-election-results",
      "performanceScore": 0.49,
      "bestPracticesScore": 0.79,
      "transferBytes": 1194561,
      "co2Grams": 0.45761410026540006,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 203350,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 50,
            "transferBytes": 165993,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11087,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2206,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973884007&cv=11&fst=1776973884007&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Felections%2F2024-election-results&rcb=10&frm=0&tiba=2024%20Election%20results%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "2024 Election results | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The official election results for the 2024 Municipal and CSAP Election. These results have been certified by the municipality’s Returning Officer as of Oct. 23, 2024.",
          "robots": "",
          "canonical": "https://www.halifax.ca/city-hall/elections/2024-election-results",
          "ogTitle": "2024 Election results",
          "ogDescription": "The official election results for the 2024 Municipal and CSAP Election. These results have been certified by the municipality’s Returning Officer as of Oct. 23, 2024.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/city-hall/elections/2024-election-results",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 66,
          "tabletSmallTapTargets": 74,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 66,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 74,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 66 small targets on mobile and 74 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 51,
          "externalScriptsWithoutIntegrity": 51,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:51:35 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "51 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 10,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 115938.04999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 35347,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30326.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 34.52 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 585197.05,
        "totalEstimatedBlockingMs": 403,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270884,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 156263,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 153 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 35347,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 35 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 403,
            "displayValue": "Est savings of 400 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30326.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.54 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 152.60 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 34.52 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "medium",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 403 ms."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 51,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "51 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 507953.20000000024
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 496.05 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 496.05 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1194561,
        "css": {
          "unusedBytes": 156263,
          "ratio": 0.13081207238475054,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270884,
          "duplicatedBytes": 0,
          "ratio": 0.22676447665711505,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 156263,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270884,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 15,
        "urgency": "high",
        "transferBytes": 1194561,
        "estimatedDeferrableBytes": 469259,
        "renderBlockingMs": 403,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270884,
          "unusedCssSavings": 156263
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270884,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 156263,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 403,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 58,
        "transferBytes": 822269,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 50,
            "transferBytes": 165993,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11087,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2206,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973884007&cv=11&fst=1776973884007&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Felections%2F2024-election-results&rcb=10&frm=0&tiba=2024%20Election%20results%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 37,
        "urgency": "medium",
        "transferBytes": 1194561,
        "estimatedRedundantBytes": 427147,
        "redundancyRatio": 0.3575765490418656,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270884,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 156263,
            "displayValue": "Est savings of 153 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270884,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 156263,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1194561,
        "heavyRequestCount": 4,
        "heavyBytes": 622124,
        "heavyRatio": 0.5207971798844931,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622124
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622124
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270884,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.22,
          "displayValue": "5.3 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 5.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 153 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 153 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 400 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 400 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,000 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,000 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.72,
          "displayValue": "4.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 265 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "2,532 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 2,532 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/city-hall/boards-committees-commissions",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/city-hall/boards-committees-commissions",
      "performanceScore": 0.45,
      "bestPracticesScore": 0.79,
      "transferBytes": 1157722,
      "co2Grams": 0.4435017645708,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 73,
            "transferBytes": 177491,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157095,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2236,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973903073&cv=11&fst=1776973903073&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fboards-committees-commissions&rcb=5&frm=0&tiba=Boards%20and%20Committees%20%7C%20City%20Hall%20%7C%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 50,
        "urgency": "medium",
        "pageElementOccurrences": 2,
        "uniqueElementsAssessed": 2,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "form|post|/city-hall/boards-committees-commissions|input|text|keys|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "keys",
            "formContext": "form|post|/city-hall/boards-committees-commissions",
            "hasLabel": false,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 70,
              "urgency": "high",
              "issues": [
                "Missing associated label",
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add a programmatic label using <label>, aria-label, or aria-labelledby.",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "2 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "2 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing associated label",
            "urgency": "high",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Boards and Committees | City Hall | Halifax | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Regional Council has various advisory boards and committees who hold meetings to review and provide advice to staff and Regional Council, community councils or standing committees.",
          "robots": "",
          "canonical": "https://www.halifax.ca/city-hall/boards-committees-commissions",
          "ogTitle": "Boards, committees & commissions",
          "ogDescription": "Regional Council has various advisory boards and committees who hold meetings to review and provide advice to staff and Regional Council, community councils or standing committees.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/city-hall/boards-committees-commissions",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 111,
          "tabletSmallTapTargets": 123,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 111,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 123,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 111 small targets on mobile and 123 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:51:57 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 10,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 110115.04999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29458,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30359.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25407,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.77 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.65 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 551727.05,
        "totalEstimatedBlockingMs": 1328,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269143,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 263 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 130313,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 127 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1328,
            "displayValue": "Est savings of 1,330 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42156,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 29458,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30359.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25407,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 262.83 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 127.26 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1328 ms."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.17 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 28.77 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 473605.8333333336
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 462.51 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 462.51 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1157722,
        "css": {
          "unusedBytes": 130313,
          "ratio": 0.11255983733573345,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269143,
          "duplicatedBytes": 0,
          "ratio": 0.23247636306470812,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 130313,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269143,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 24,
        "urgency": "high",
        "transferBytes": 1157722,
        "estimatedDeferrableBytes": 441612,
        "renderBlockingMs": 1328,
        "breakdown": {
          "offscreenImageSavings": 42156,
          "unusedJavascriptSavings": 269143,
          "unusedCssSavings": 130313
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42156,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269143,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 130313,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1328,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 813406,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157095,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2236,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973903073&cv=11&fst=1776973903073&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fboards-committees-commissions&rcb=5&frm=0&tiba=Boards%20and%20Committees%20%7C%20City%20Hall%20%7C%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 36,
        "urgency": "medium",
        "transferBytes": 1157722,
        "estimatedRedundantBytes": 399456,
        "redundancyRatio": 0.3450362004004416,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269143,
            "displayValue": "Est savings of 263 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 130313,
            "displayValue": "Est savings of 127 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269143,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 130313,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 31,
        "urgency": "medium",
        "totalTransferBytes": 1157722,
        "heavyRequestCount": 4,
        "heavyBytes": 622124,
        "heavyRatio": 0.5373690747865204,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622124
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622124
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42156,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269143,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.02,
          "displayValue": "8.0 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 8.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 263 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 263 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 127 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 127 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,330 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,330 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 790 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 790 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.68,
          "displayValue": "4.8 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,521 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,521 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/city-hall/budget-finances/budget",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/city-hall/budget-finances/budget",
      "performanceScore": 0.6,
      "bestPracticesScore": 0.79,
      "transferBytes": 3534871,
      "co2Grams": 1.3541433314994002,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622103,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 73,
            "transferBytes": 176108,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156846,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2225,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973924690&cv=11&fst=1776973924690&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fbudget-finances%2Fbudget&rcb=18&frm=0&tiba=Budget%20%7C%20Multi-Year%20Financial%20Strategy%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Budget | Multi-Year Financial Strategy | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Current year budget information for the Halifax Regional Municipality.",
          "robots": "",
          "canonical": "https://www.halifax.ca/city-hall/budget-finances/budget",
          "ogTitle": "2026/27 municipal budget summary",
          "ogDescription": "Current year budget information for the Halifax Regional Municipality.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/city-hall/budget-finances/budget",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 69,
          "tabletSmallTapTargets": 73,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 69,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 73,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 69 small targets on mobile and 73 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:52:17 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 13,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 13
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "13 of 13 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 13,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/13 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 63,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 2229246.75,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 2134309.75,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29429,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 40617,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 2.04 MB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.74 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 39.67 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 3416751.75,
        "totalEstimatedBlockingMs": 865,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 2134309.75,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 2,084 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 496856,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 485 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 289592,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 283 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270927,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 130130,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 127 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 29429,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 865,
            "displayValue": "Est savings of 870 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 40617,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 40 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 2.04 MB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "high",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 485.21 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 282.80 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.58 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 127.08 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 28.74 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 2835582.2666666647
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 2.70 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 2.70 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 7,
        "urgency": "high",
        "transferBytes": 3534871,
        "css": {
          "unusedBytes": 130130,
          "ratio": 0.03681322458443321,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270927,
          "duplicatedBytes": 0,
          "ratio": 0.07664409818632703,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 130130,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270927,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 15,
        "urgency": "high",
        "transferBytes": 3534871,
        "estimatedDeferrableBytes": 690649,
        "renderBlockingMs": 865,
        "breakdown": {
          "offscreenImageSavings": 289592,
          "unusedJavascriptSavings": 270927,
          "unusedCssSavings": 130130
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 289592,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270927,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 130130,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 865,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 1049686,
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2026-03/cover-of-202627-municipal-budget_0.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163009,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 813125,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622103,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156846,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2225,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973924690&cv=11&fst=1776973924690&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fbudget-finances%2Fbudget&rcb=18&frm=0&tiba=Budget%20%7C%20Multi-Year%20Financial%20Strategy%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 26,
        "urgency": "medium",
        "transferBytes": 3534871,
        "estimatedRedundantBytes": 401057,
        "redundancyRatio": 0.11345732277076023,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270927,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 130130,
            "displayValue": "Est savings of 127 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270927,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 130130,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 43,
        "urgency": "high",
        "totalTransferBytes": 3534871,
        "heavyRequestCount": 7,
        "heavyBytes": 2925575,
        "heavyRatio": 0.8276327481257449,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2026-03/cover-of-202627-municipal-budget_0.png",
            "transferSize": 1049686,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2026-03/cover-of-202627-capital-plan.png",
            "transferSize": 1006031,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163009,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162244,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160357,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136493,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "image",
            "count": 3,
            "transferBytes": 2303472
          },
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622103
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "cdn.halifax.ca",
            "count": 2,
            "transferBytes": 2055717
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622103
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 289592,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270927,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 1049686,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2026-03/cover-of-202627-municipal-budget_0.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "9.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 9.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 265 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 127 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 127 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 870 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 870 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,090 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,090 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.79,
          "displayValue": "4.1 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 2,084 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 2,084 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 40 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 40 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 283 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 283 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 3,452 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 3,452 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,298 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,298 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/city-hall/agendas-meetings-reports?category=127",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/city-hall/agendas-meetings-reports?category=127",
      "performanceScore": 0.43,
      "bestPracticesScore": 0.79,
      "transferBytes": 6941697,
      "co2Grams": 2.6592350051358005,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "cdn.syncfusion.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 3533638,
            "sampleUrl": "https://cdn.syncfusion.com/ej2/20.1.58/dist/ej2.min.js",
            "greenCheck": {
              "hostname": "cdn.syncfusion.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:44.844195",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.syncfusion.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "script",
            "requestCount": 13,
            "transferBytes": 373674,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hV1py28wMG7hGK3zb8SMYyBRuNdQ/dti=1/m=_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 76,
            "transferBytes": 370051,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "pub-halifax.escribemeetings.com",
            "resourceType": "script",
            "requestCount": 6,
            "transferBytes": 254805,
            "sampleUrl": "https://pub-halifax.escribemeetings.com/bundles/modernizr?v=inCVuEFe6J4Q07A0AcRsbJic_UE5MwpRMNGcOtk94TE1",
            "greenCheck": {
              "hostname": "pub-halifax.escribemeetings.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-23T19:50:46",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/pub-halifax.escribemeetings.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 65,
            "transferBytes": 212993,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.syncfusion.com",
            "resourceType": "stylesheet",
            "requestCount": 6,
            "transferBytes": 177927,
            "sampleUrl": "https://cdn.syncfusion.com/ej2/20.1.58/ej2-base/styles/material.css",
            "greenCheck": {
              "hostname": "cdn.syncfusion.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:44.844195",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.syncfusion.com",
              "error": null
            }
          },
          {
            "hostname": "apis.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 116278,
            "sampleUrl": "https://apis.google.com/js/api.js",
            "greenCheck": {
              "hostname": "apis.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/apis.google.com",
              "error": null
            }
          },
          {
            "hostname": "go.playerzero.app",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 102233,
            "sampleUrl": "https://go.playerzero.app/record/6880f5f3fcc3eb359abc739e",
            "greenCheck": {
              "hostname": "go.playerzero.app",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:44.920802",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/go.playerzero.app",
              "error": null
            }
          },
          {
            "hostname": "pub-halifax.escribemeetings.com",
            "resourceType": "stylesheet",
            "requestCount": 3,
            "transferBytes": 71598,
            "sampleUrl": "https://pub-halifax.escribemeetings.com/Content/css?v=y9uK_ceFCy45Y9o-TkZcQepZ0THYo7k4dhCGMioBdfs1",
            "greenCheck": {
              "hostname": "pub-halifax.escribemeetings.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-23T19:50:46",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/pub-halifax.escribemeetings.com",
              "error": null
            }
          },
          {
            "hostname": "www.datadoghq-browser-agent.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 60660,
            "sampleUrl": "https://www.datadoghq-browser-agent.com/us3/v6/datadog-rum.js",
            "greenCheck": {
              "hostname": "www.datadoghq-browser-agent.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T04:58:17.329313",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.datadoghq-browser-agent.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 42007,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/ss/k=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AABwAM4AAAE/d=1/ed=1/rs=AA4Gz9ifutIKqFdv4btOxUVY8-4VlehtiQ/m=mainview,_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "code.jquery.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 30755,
            "sampleUrl": "https://code.jquery.com/jquery-3.4.1.min.js",
            "greenCheck": {
              "hostname": "code.jquery.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T02:11:25.445753",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/code.jquery.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.datatables.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 29360,
            "sampleUrl": "https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js",
            "greenCheck": {
              "hostname": "cdn.datatables.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:53",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.datatables.net",
              "error": null
            }
          },
          {
            "hostname": "stackpath.bootstrapcdn.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 25323,
            "sampleUrl": "https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css",
            "greenCheck": {
              "hostname": "stackpath.bootstrapcdn.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:50:38",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/stackpath.bootstrapcdn.com",
              "error": null
            }
          },
          {
            "hostname": "cdnjs.cloudflare.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 22937,
            "sampleUrl": "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js",
            "greenCheck": {
              "hostname": "cdnjs.cloudflare.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:34",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdnjs.cloudflare.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "maxst.icons8.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 17337,
            "sampleUrl": "https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/css/line-awesome.min.css",
            "greenCheck": {
              "hostname": "maxst.icons8.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:45.933494",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/maxst.icons8.com",
              "error": null
            }
          },
          {
            "hostname": "stackpath.bootstrapcdn.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 17043,
            "sampleUrl": "https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js",
            "greenCheck": {
              "hostname": "stackpath.bootstrapcdn.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:50:38",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/stackpath.bootstrapcdn.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.jsdelivr.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 10572,
            "sampleUrl": "https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js",
            "greenCheck": {
              "hostname": "cdn.jsdelivr.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:39",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.jsdelivr.net",
              "error": null
            }
          },
          {
            "hostname": "maxcdn.icons8.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 6579,
            "sampleUrl": "https://maxcdn.icons8.com/fonts/line-awesome/1.1/css/line-awesome.min.css",
            "greenCheck": {
              "hostname": "maxcdn.icons8.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:46.249405",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/maxcdn.icons8.com",
              "error": null
            }
          },
          {
            "hostname": "maxcdn.bootstrapcdn.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 5571,
            "sampleUrl": "https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css",
            "greenCheck": {
              "hostname": "maxcdn.bootstrapcdn.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:15",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/maxcdn.bootstrapcdn.com",
              "error": null
            }
          },
          {
            "hostname": "fonts.googleapis.com",
            "resourceType": "stylesheet",
            "requestCount": 6,
            "transferBytes": 5489,
            "sampleUrl": "https://fonts.googleapis.com/css?family=Public%20Sans",
            "greenCheck": {
              "hostname": "fonts.googleapis.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/fonts.googleapis.com",
              "error": null
            }
          },
          {
            "hostname": "cdnjs.cloudflare.com",
            "resourceType": "stylesheet",
            "requestCount": 2,
            "transferBytes": 5425,
            "sampleUrl": "https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.0.1/fullcalendar.min.css",
            "greenCheck": {
              "hostname": "cdnjs.cloudflare.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:34",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdnjs.cloudflare.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.datatables.net",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 2316,
            "sampleUrl": "https://cdn.datatables.net/1.11.5/css/jquery.dataTables.min.css",
            "greenCheck": {
              "hostname": "cdn.datatables.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:53",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.datatables.net",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2236,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973945020&cv=11&fst=1776973945020&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938469~117266400~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fagendas-meetings-reports%3Fcategory%3D127&rcb=4&frm=0&tiba=Agendas%20%7C%20Meetings%20%7C%20Reports%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 27,
          "greenCount": 18,
          "notGreenCount": 10,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 40,
        "urgency": "medium",
        "pageElementOccurrences": 8,
        "uniqueElementsAssessed": 7,
        "reusedFromCacheCount": 7,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "no-form|input|radio|c-search-meetings-form__radio|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "radio",
            "fieldName": "c-search-meetings-form__radio",
            "formContext": "no-form",
            "hasLabel": true,
            "hasValidationRule": false,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 50,
              "urgency": "medium",
              "issues": [
                "No explicit validation rule",
                "No error messaging hook"
              ],
              "recommendations": [
                "Define validation constraints (required, pattern, min/max, or semantic input type).",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "form|get|/city-hall/agendas-meetings-reports|select|select|category|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "select",
            "fieldName": "category",
            "formContext": "form|get|/city-hall/agendas-meetings-reports",
            "hasLabel": true,
            "hasValidationRule": false,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 50,
              "urgency": "medium",
              "issues": [
                "No explicit validation rule",
                "No error messaging hook"
              ],
              "recommendations": [
                "Define validation constraints (required, pattern, min/max, or semantic input type).",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "form|get|/city-hall/agendas-meetings-reports|input|date|start|off|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "date",
            "fieldName": "start",
            "formContext": "form|get|/city-hall/agendas-meetings-reports",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 20,
              "urgency": "low",
              "issues": [
                "No error messaging hook"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "form|get|/city-hall/agendas-meetings-reports|input|date|end|off|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "date",
            "fieldName": "end",
            "formContext": "form|get|/city-hall/agendas-meetings-reports",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 20,
              "urgency": "low",
              "issues": [
                "No error messaging hook"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "search|get|/search/content|select|select|filter_by|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "select",
            "fieldName": "filter_by",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": false,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 50,
              "urgency": "medium",
              "issues": [
                "No explicit validation rule",
                "No error messaging hook"
              ],
              "recommendations": [
                "Define validation constraints (required, pattern, min/max, or semantic input type).",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "search|get|/search/content|input|text|keys|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "text",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": false,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 60,
              "urgency": "high",
              "issues": [
                "No explicit validation rule",
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Define validation constraints (required, pattern, min/max, or semantic input type).",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "7 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "No explicit validation rule",
            "urgency": "medium",
            "detail": "4 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "2 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Agendas | Meetings | Reports | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "You can browse or search for meeting information using the table on this page.",
          "robots": "",
          "canonical": "https://www.halifax.ca/city-hall/agendas-meetings-reports",
          "ogTitle": "Agendas, meetings & reports",
          "ogDescription": "You can browse or search for meeting information using the table on this page.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/city-hall/agendas-meetings-reports",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 116,
          "tabletSmallTapTargets": 129,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 116,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 129,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 116 small targets on mobile and 129 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 73,
          "externalScriptsWithoutIntegrity": 73,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:52:41 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "73 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 9,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 9 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 9,
            "lazyImages": 0,
            "totalIframes": 2,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/9 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 6,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 393832.8,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 266495.8,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 69521,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 32443,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25373,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.25 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 67.89 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 31.68 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1264144.8,
        "totalEstimatedBlockingMs": 1788,
        "opportunities": [
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 313841,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 306 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 289591,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 283 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 266880,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 261 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 266495.8,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 260 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1788,
            "displayValue": "Est savings of 1,790 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 69521,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 68 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 32443,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 32 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25373,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 306.49 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 282.80 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 260.63 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 260.25 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1788 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 67.89 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 73,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "73 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1129623.5875
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.08 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.08 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 6,
        "urgency": "high",
        "transferBytes": 6941697,
        "css": {
          "unusedBytes": 313841,
          "ratio": 0.04521099091475759,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 266880,
          "duplicatedBytes": 0,
          "ratio": 0.03844593044035198,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 313841,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 266880,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 19,
        "urgency": "high",
        "transferBytes": 6941697,
        "estimatedDeferrableBytes": 870312,
        "renderBlockingMs": 1788,
        "breakdown": {
          "offscreenImageSavings": 289591,
          "unusedJavascriptSavings": 266880,
          "unusedCssSavings": 313841
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 289591,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 266880,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 313841,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1788,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from cdn.syncfusion.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 3533638,
            "url": "https://cdn.syncfusion.com/ej2/20.1.58/dist/ej2.min.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.gstatic.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 194075,
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9gO0fTMLCZ6EAbjKHcCJyfDXSspOQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from pub-halifax.escribemeetings.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 172078,
            "url": "https://pub-halifax.escribemeetings.com/bundles/MeetingList?v=e4Ptuni7g8Q8v8c3RRk44Y6R6z_V_2NH3cMLZjoVIUU1",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 90,
        "urgency": "high",
        "providerCount": 16,
        "requestCount": 104,
        "transferBytes": 5421259,
        "notGreenCount": 5,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "cdn.syncfusion.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 3533638,
            "sampleUrl": "https://cdn.syncfusion.com/ej2/20.1.58/dist/ej2.min.js",
            "greenCheck": {
              "hostname": "cdn.syncfusion.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:44.844195",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.syncfusion.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "www.gstatic.com",
            "resourceType": "script",
            "requestCount": 13,
            "transferBytes": 373674,
            "sampleUrl": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hV1py28wMG7hGK3zb8SMYyBRuNdQ/dti=1/m=_b,_tp",
            "greenCheck": {
              "hostname": "www.gstatic.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:50",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.gstatic.com",
              "error": null
            }
          },
          {
            "hostname": "pub-halifax.escribemeetings.com",
            "resourceType": "script",
            "requestCount": 6,
            "transferBytes": 254805,
            "sampleUrl": "https://pub-halifax.escribemeetings.com/bundles/modernizr?v=inCVuEFe6J4Q07A0AcRsbJic_UE5MwpRMNGcOtk94TE1",
            "greenCheck": {
              "hostname": "pub-halifax.escribemeetings.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-23T19:50:46",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/pub-halifax.escribemeetings.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 65,
            "transferBytes": 212993,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "apis.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 116278,
            "sampleUrl": "https://apis.google.com/js/api.js",
            "greenCheck": {
              "hostname": "apis.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/apis.google.com",
              "error": null
            }
          },
          {
            "hostname": "go.playerzero.app",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 102233,
            "sampleUrl": "https://go.playerzero.app/record/6880f5f3fcc3eb359abc739e",
            "greenCheck": {
              "hostname": "go.playerzero.app",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:50:44.920802",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/go.playerzero.app",
              "error": null
            }
          },
          {
            "hostname": "www.datadoghq-browser-agent.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 60660,
            "sampleUrl": "https://www.datadoghq-browser-agent.com/us3/v6/datadog-rum.js",
            "greenCheck": {
              "hostname": "www.datadoghq-browser-agent.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T04:58:17.329313",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.datadoghq-browser-agent.com",
              "error": null
            }
          },
          {
            "hostname": "code.jquery.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 30755,
            "sampleUrl": "https://code.jquery.com/jquery-3.4.1.min.js",
            "greenCheck": {
              "hostname": "code.jquery.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T02:11:25.445753",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/code.jquery.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.datatables.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 29360,
            "sampleUrl": "https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js",
            "greenCheck": {
              "hostname": "cdn.datatables.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:53",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.datatables.net",
              "error": null
            }
          },
          {
            "hostname": "cdnjs.cloudflare.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 22937,
            "sampleUrl": "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js",
            "greenCheck": {
              "hostname": "cdnjs.cloudflare.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:34",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdnjs.cloudflare.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "stackpath.bootstrapcdn.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 17043,
            "sampleUrl": "https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js",
            "greenCheck": {
              "hostname": "stackpath.bootstrapcdn.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:50:38",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/stackpath.bootstrapcdn.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.jsdelivr.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 10572,
            "sampleUrl": "https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js",
            "greenCheck": {
              "hostname": "cdn.jsdelivr.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:39",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.jsdelivr.net",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2236,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973945020&cv=11&fst=1776973945020&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938469~117266400~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fagendas-meetings-reports%3Fcategory%3D127&rcb=4&frm=0&tiba=Agendas%20%7C%20Meetings%20%7C%20Reports%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 16 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "5 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 22,
        "urgency": "high",
        "transferBytes": 6941697,
        "estimatedRedundantBytes": 580721,
        "redundancyRatio": 0.08365692135510956,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 313841,
            "displayValue": "Est savings of 306 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 266880,
            "displayValue": "Est savings of 261 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 313841,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 266880,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 44,
        "urgency": "high",
        "totalTransferBytes": 6941697,
        "heavyRequestCount": 19,
        "heavyBytes": 5679667,
        "heavyRatio": 0.8181957524219222,
        "heavyRequests": [
          {
            "url": "https://cdn.syncfusion.com/ej2/20.1.58/dist/ej2.min.js",
            "transferSize": 3533638,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "cdn.syncfusion.com"
          },
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9gO0fTMLCZ6EAbjKHcCJyfDXSspOQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "transferSize": 194075,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.gstatic.com"
          },
          {
            "url": "https://pub-halifax.escribemeetings.com/bundles/MeetingList?v=e4Ptuni7g8Q8v8c3RRk44Y6R6z_V_2NH3cMLZjoVIUU1",
            "transferSize": 172078,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "pub-halifax.escribemeetings.com"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://apis.google.com/_/scs/abc-static/_/js/k=gapi.lb.en.PJsh2cctCQI.O/m=client/rt=j/sv=1/d=1/ed=1/rs=AHpOoo_QlMhY2cycn60Rs8eI1WInRwuahw/cb=gapi.loaded_0?le=scs,fedcm_migration_mod",
            "transferSize": 110445,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "apis.google.com"
          },
          {
            "url": "https://go.playerzero.app/record/6880f5f3fcc3eb359abc739e",
            "transferSize": 102233,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "go.playerzero.app"
          },
          {
            "url": "https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/fonts/la-solid-900.woff2",
            "transferSize": 97517,
            "resourceType": "font",
            "mimeType": "font/woff2",
            "domain": "maxst.icons8.com"
          },
          {
            "url": "https://cdn.syncfusion.com/ej2/20.1.58/ej2-base/styles/material.css",
            "transferSize": 92150,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.syncfusion.com"
          },
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/am=AAAAAMY/d=1/excm=_b,_tp,mainview/ed=1/dg=0/wt=2/ujg=1/rs=AA4Gz9hV1py28wMG7hGK3zb8SMYyBRuNdQ/dti=1/m=_b,_tp",
            "transferSize": 73669,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.gstatic.com"
          },
          {
            "url": "https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/fonts/fontawesome-webfont.woff?v=4.2.0",
            "transferSize": 65996,
            "resourceType": "font",
            "mimeType": "font/woff",
            "domain": "maxcdn.bootstrapcdn.com"
          },
          {
            "url": "https://cdn.syncfusion.com/ej2/ej2-inputs/styles/material.css",
            "transferSize": 56294,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.syncfusion.com"
          },
          {
            "url": "https://pub-halifax.escribemeetings.com/Content/css?v=y9uK_ceFCy45Y9o-TkZcQepZ0THYo7k4dhCGMioBdfs1",
            "transferSize": 53968,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "pub-halifax.escribemeetings.com"
          },
          {
            "url": "https://fonts.gstatic.com/s/googlesans/v58/4UaRrENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iq2vgCIhM907w.woff2",
            "transferSize": 52278,
            "resourceType": "font",
            "mimeType": "font/woff2",
            "domain": "fonts.gstatic.com"
          },
          {
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/ss/k=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AABwAM4AAAE/d=1/ed=1/rs=AA4Gz9ifutIKqFdv4btOxUVY8-4VlehtiQ/m=mainview,_b,_tp",
            "transferSize": 42007,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.gstatic.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 10,
            "transferBytes": 4808262
          },
          {
            "resourceType": "stylesheet",
            "count": 5,
            "transferBytes": 407859
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "resourceType": "font",
            "count": 3,
            "transferBytes": 215791
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "cdn.syncfusion.com",
            "count": 3,
            "transferBytes": 3682082
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622124
          },
          {
            "domain": "www.gstatic.com",
            "count": 3,
            "transferBytes": 309751
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "domain": "pub-halifax.escribemeetings.com",
            "count": 2,
            "transferBytes": 226046
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163440
          },
          {
            "domain": "apis.google.com",
            "count": 1,
            "transferBytes": 110445
          },
          {
            "domain": "go.playerzero.app",
            "count": 1,
            "transferBytes": 102233
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 289591,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 266880,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from cdn.syncfusion.com",
            "urgency": "high",
            "estimatedSavingsBytes": 3533638,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://cdn.syncfusion.com/ej2/20.1.58/dist/ej2.min.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.gstatic.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 194075,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.gstatic.com/_/mss/boq-calendar/_/js/k=boq-calendar.CalendarEmbed.en_US.98rwwD7gScI.2020.O/ck=boq-calendar.CalendarEmbed.PBxVChcHsgA.L.B1.O/am=AAAAAMY/d=1/exm=_b,_tp/excm=_b,_tp,mainview/ed=1/wt=2/ujg=1/rs=AA4Gz9gO0fTMLCZ6EAbjKHcCJyfDXSspOQ/ee=CJ47re:ToX3Rb;EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;Ihkztf:vb99p;JsbNhc:Xd8iUd;Jvdite:REKrce;LBgRLc:XVMNvd;NJ1rfe:qTnoBf;NPKaK:PVlQOd;P69oD:gq1AX;Piz1P:cKVpNc;Q0QYCe:oU0Ogd;QYNC6c:Dluncf;SNUn3:ZwDk9d;TOpeQb:oWuQqb;Tw3Fob:MOyZ4e;VcZQlf:NJNNdf;X6TJdf:HIv3ub;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dSBVQe:CoMMcc;eBAeSb:HT8XDe;eL17hf:l6iUcd;elY7Hc:bveKif;f05Y9d:BBy1Sb;iFQyKf:QIhFr;iZUFvf:UUFsnc;oGtAuc:sOXFj;oMv1Xd:dUeVBe;pXdRYb:pVJdtc;qQEoOc:KUM7Z;qddgKe:xQtZb;rvFmHf:jw1PDc;vN30hf:C2zKAd;vdZkHe:GIDAnd;wR5FRb:siKnQd;wcAVMb:bUUOIe;yxTchf:KUM7Z;yzDIMd:Wn9Cpd/dti=1/m=Gois3b",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.06,
          "displayValue": "7.0 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 7.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.12,
          "displayValue": "9.3 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 9.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 261 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 261 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 306 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 306 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 260 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 260 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 25 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 283 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 283 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,790 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,790 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,040 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,040 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 6,779 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 6,779 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,511 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,511 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/city-hall/strategic-plan",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/city-hall/strategic-plan",
      "performanceScore": 0.65,
      "bestPracticesScore": 0.79,
      "transferBytes": 3420039,
      "co2Grams": 1.3101533281746005,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 8,
            "transferBytes": 1642998,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622121,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 50,
            "transferBytes": 166213,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 73,
            "transferBytes": 163992,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "stylesheet",
            "requestCount": 4,
            "transferBytes": 105997,
            "sampleUrl": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 47347,
            "sampleUrl": "https://www.google.com/js/th/tFlgh3vcjwdXGn3emHniF-gR5D1hxoaFKd3DGQF7sI0.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2211,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973971543&cv=11&fst=1776973971543&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938468~117266401~118128922&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fstrategic-plan&rcb=1&frm=0&tiba=Strategic%20Plan%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 496,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 9,
          "greenCount": 7,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Strategic Plan | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The Strategic Plan reflects the Halifax Regional Municipality’s key areas of focus and results, in making a difference in the lives of residents.",
          "robots": "",
          "canonical": "https://www.halifax.ca/city-hall/strategic-plan",
          "ogTitle": "Strategic Plan",
          "ogDescription": "The Strategic Plan reflects the Halifax Regional Municipality’s key areas of focus and results, in making a difference in the lives of residents.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/city-hall/strategic-plan",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 74,
          "tabletSmallTapTargets": 78,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 74,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 78,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 74 small targets on mobile and 78 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 55,
          "externalScriptsWithoutIntegrity": 55,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:53:07 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "55 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 10,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 10
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "10 of 10 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 10,
            "lazyImages": 0,
            "totalIframes": 1,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/10 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 377016.6,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 290661.6,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26544,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 34920,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 283.85 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.92 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 34.10 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1050798.6,
        "totalEstimatedBlockingMs": 1555,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 290661.6,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 284 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 289636,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 283 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 266795,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 261 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1555,
            "displayValue": "Est savings of 1,560 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 117351,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 115 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26544,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 34920,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 34 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 283.85 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 282.85 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 260.54 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1555 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 114.60 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 25.92 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 55,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "55 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 765857
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 747.91 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 747.91 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 7,
        "urgency": "high",
        "transferBytes": 3420039,
        "css": {
          "unusedBytes": 117351,
          "ratio": 0.03431276660880183,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 266795,
          "duplicatedBytes": 0,
          "ratio": 0.0780093443378862,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 117351,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 266795,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 3420039,
        "estimatedDeferrableBytes": 673782,
        "renderBlockingMs": 1555,
        "breakdown": {
          "offscreenImageSavings": 289636,
          "unusedJavascriptSavings": 266795,
          "unusedCssSavings": 117351
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 289636,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 266795,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 117351,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1555,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.youtube.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 483677,
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 7,
        "requestCount": 68,
        "transferBytes": 2502245,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 8,
            "transferBytes": 1642998,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622121,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 50,
            "transferBytes": 166213,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 47347,
            "sampleUrl": "https://www.google.com/js/th/tFlgh3vcjwdXGn3emHniF-gR5D1hxoaFKd3DGQF7sI0.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2211,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973971543&cv=11&fst=1776973971543&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938468~117266401~118128922&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fcity-hall%2Fstrategic-plan&rcb=1&frm=0&tiba=Strategic%20Plan%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 496,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 7 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 24,
        "urgency": "medium",
        "transferBytes": 3420039,
        "estimatedRedundantBytes": 384146,
        "redundancyRatio": 0.11232211094668804,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 266795,
            "displayValue": "Est savings of 261 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 117351,
            "displayValue": "Est savings of 115 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 266795,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 117351,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 44,
        "urgency": "high",
        "totalTransferBytes": 3420039,
        "heavyRequestCount": 13,
        "heavyBytes": 2607770,
        "heavyRatio": 0.7624971528102458,
        "heavyRequests": [
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "transferSize": 483677,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed_es6.vflset/en_US/base.js",
            "transferSize": 446729,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/exm=base,root/ed=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=r78Drb",
            "transferSize": 208620,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/exm=base,root/ed=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=r78Drb",
            "transferSize": 188791,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163009,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=root,base",
            "transferSize": 160564,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "transferSize": 143516,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "transferSize": 59152,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/ss/k=ytembeds.base.oRmnRxCtskc.L.W.O/am=AAAABA/d=0/br=1/rs=AGKMywHkqPKx19LNLTFOD88ZyDOWYDGFJw",
            "transferSize": 46845,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 10,
            "transferBytes": 2254018
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "resourceType": "stylesheet",
            "count": 2,
            "transferBytes": 105997
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.youtube.com",
            "count": 8,
            "transferBytes": 1737894
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622121
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 289636,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 266795,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.youtube.com",
            "urgency": "high",
            "estimatedSavingsBytes": 483677,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.4,
          "displayValue": "6.4 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 6.4 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 115 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 115 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,560 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,560 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 900 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 900 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.63,
          "displayValue": "3.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 3.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 261 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 261 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 284 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 284 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 34 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 34 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 283 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 283 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 3,340 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 3,340 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,329 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,329 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/transportation/halifax-transit/routes-schedules?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Transit",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/transportation/halifax-transit/routes-schedules?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Transit",
      "performanceScore": 0.49,
      "bestPracticesScore": 0.75,
      "transferBytes": 1333438,
      "co2Grams": 0.5108152958532,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 340282,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 175380,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11110,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2266,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973996864&cv=11&fst=1776973996864&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fhalifax-transit%2Froutes-schedules%3Futm_source%3DHalifax.ca%26amp%3Butm_medium%3DPopular_links%26amp%3Butm_campaign%3DTransit&rcb=12&frm=0&tiba=Routes%20%7C%20Schedules%20%7C%20Halifax%20Transit%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Routes | Schedules | Halifax Transit | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax Transit's bus route information and schedules.",
          "robots": "",
          "canonical": "https://www.halifax.ca/transportation/halifax-transit/routes-schedules",
          "ogTitle": "Routes & Schedules",
          "ogDescription": "Halifax Transit's bus route information and schedules.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/transportation/halifax-transit/routes-schedules",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 220,
          "tabletSmallTapTargets": 212,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 220,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 212,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 220 small targets on mobile and 212 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:53:32 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 46,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 16,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 15
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "15 of 16 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 16,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/16 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 12,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 158221.8,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 63478,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 40007.799999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25402,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 61.99 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 39.07 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 756948.8,
        "totalEstimatedBlockingMs": 2539,
        "opportunities": [
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 287026,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 280 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269550,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 263 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2539,
            "displayValue": "Est savings of 2,540 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 63478,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 62 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42151,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 40007.799999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 39 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25402,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 280.30 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.23 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 2539 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 61.99 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.16 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 28.65 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 640273.7249999997
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 625.27 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 625.27 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 19,
        "urgency": "high",
        "transferBytes": 1333438,
        "css": {
          "unusedBytes": 287026,
          "ratio": 0.21525260267069035,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269550,
          "duplicatedBytes": 0,
          "ratio": 0.20214663148942807,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 287026,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269550,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 26,
        "urgency": "high",
        "transferBytes": 1333438,
        "estimatedDeferrableBytes": 598727,
        "renderBlockingMs": 2539,
        "breakdown": {
          "offscreenImageSavings": 42151,
          "unusedJavascriptSavings": 269550,
          "unusedCssSavings": 287026
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42151,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269550,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 287026,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2539,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163451,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 831739,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 175380,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11110,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2266,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776973996864&cv=11&fst=1776973996864&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fhalifax-transit%2Froutes-schedules%3Futm_source%3DHalifax.ca%26amp%3Butm_medium%3DPopular_links%26amp%3Butm_campaign%3DTransit&rcb=12&frm=0&tiba=Routes%20%7C%20Schedules%20%7C%20Halifax%20Transit%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 40,
        "urgency": "high",
        "transferBytes": 1333438,
        "estimatedRedundantBytes": 556576,
        "redundancyRatio": 0.4173992341601184,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 287026,
            "displayValue": "Est savings of 280 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269550,
            "displayValue": "Est savings of 263 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 287026,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269550,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 33,
        "urgency": "medium",
        "totalTransferBytes": 1333438,
        "heavyRequestCount": 5,
        "heavyBytes": 785575,
        "heavyRatio": 0.5891350029022722,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163451,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622124
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163451
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622124
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163451
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42151,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269550,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163451,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.08,
          "displayValue": "6.6 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 6.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.38,
          "displayValue": "6.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 6.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 263 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 263 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 280 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 280 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 2,540 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 2,540 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 2,030 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 2,030 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 39 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 39 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "3,049 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 3,049 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home-property/municipal-payments/making-a-payment",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home-property/municipal-payments/making-a-payment",
      "performanceScore": 0.59,
      "bestPracticesScore": 0.79,
      "transferBytes": 1421415,
      "co2Grams": 0.544517648181,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 339788,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 50,
            "transferBytes": 184105,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11113,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2239,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974020214&cv=11&fst=1776974020214&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400~117884344~118128923&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fmunicipal-payments%2Fmaking-a-payment&rcb=14&frm=0&tiba=Municipal%20Payments%20%7C%20Services%20and%20Fees%20%7C%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Municipal Payments | Services and Fees | Halifax | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax Regional Municipality offers many payment options for services and fees.",
          "robots": "",
          "canonical": "https://www.halifax.ca/home-property/municipal-payments/making-a-payment",
          "ogTitle": "Making a payment",
          "ogDescription": "Halifax Regional Municipality offers many payment options for services and fees.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home-property/municipal-payments/making-a-payment",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 73,
          "tabletSmallTapTargets": 78,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 73,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 78,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 73 small targets on mobile and 78 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 51,
          "externalScriptsWithoutIntegrity": 51,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:53:52 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "51 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 10,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 10
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "10 of 10 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 10,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/10 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 13,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 181472.9,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 63484,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 54664.9,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 33990,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 62.00 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 53.38 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 33.19 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 781296.9,
        "totalEstimatedBlockingMs": 1631,
        "opportunities": [
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 287124,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 280 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270584,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1631,
            "displayValue": "Est savings of 1,630 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 63484,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 62 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 54664.9,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 53 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42116,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 33990,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 33 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 280.39 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.24 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1631 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 62.00 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 53.38 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 51,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "51 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 737329.6666666672
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 720.05 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 720.05 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 18,
        "urgency": "high",
        "transferBytes": 1421415,
        "css": {
          "unusedBytes": 287124,
          "ratio": 0.20199871255052185,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270584,
          "duplicatedBytes": 0,
          "ratio": 0.1903624205457238,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 287124,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270584,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 26,
        "urgency": "high",
        "transferBytes": 1421415,
        "estimatedDeferrableBytes": 599824,
        "renderBlockingMs": 1631,
        "breakdown": {
          "offscreenImageSavings": 42116,
          "unusedJavascriptSavings": 270584,
          "unusedCssSavings": 287124
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270584,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 287124,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1631,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163441,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 58,
        "transferBytes": 840440,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 50,
            "transferBytes": 184105,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11113,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2239,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974020214&cv=11&fst=1776974020214&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938468~117266400~117884344~118128923&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fmunicipal-payments%2Fmaking-a-payment&rcb=14&frm=0&tiba=Municipal%20Payments%20%7C%20Services%20and%20Fees%20%7C%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 42,
        "urgency": "high",
        "transferBytes": 1421415,
        "estimatedRedundantBytes": 557708,
        "redundancyRatio": 0.39236113309624565,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 287124,
            "displayValue": "Est savings of 280 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270584,
            "displayValue": "Est savings of 264 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 287124,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270584,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 32,
        "urgency": "medium",
        "totalTransferBytes": 1421415,
        "heavyRequestCount": 5,
        "heavyBytes": 785565,
        "heavyRatio": 0.5526640706619812,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163441,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622124
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163441
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622124
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163441
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270584,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163441,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.28,
          "displayValue": "4.9 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 280 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 280 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 53 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 53 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 33 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 33 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,630 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,630 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.79,
          "displayValue": "4.1 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,419 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,419 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/transportation/parking?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Parking",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/transportation/parking?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Parking",
      "performanceScore": 0.51,
      "bestPracticesScore": 0.79,
      "transferBytes": 1162860,
      "co2Grams": 0.445470036804,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622119,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 175894,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156155,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2273,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974039716&cv=11&fst=1776974039716&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fparking%3Futm_source%3DHalifax.ca%26amp%3Butm_medium%3DPopular_links%26amp%3Butm_campaign%3DParking&rcb=7&frm=0&tiba=Parking%20%7C%20Pay%20Stations%20%7C%20Street%20Parking%20%7C%20Permits%20%7C%20Tickets%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Parking | Pay Stations | Street Parking | Permits | Tickets | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Parking, pay stations, street parking, permits and tickets.",
          "robots": "",
          "canonical": "https://www.halifax.ca/transportation/parking",
          "ogTitle": "Parking",
          "ogDescription": "Parking, pay stations, street parking, permits and tickets.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/transportation/parking",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 69,
          "tabletSmallTapTargets": 75,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 69,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 75,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 69 small targets on mobile and 75 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:54:10 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 132452.7,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 52699.700000000004,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29485,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25377,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 51.46 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.79 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 574983.7,
        "totalEstimatedBlockingMs": 866,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270185,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 130230,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 127 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 52699.700000000004,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 51 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42116,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 29485,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 866,
            "displayValue": "Est savings of 870 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25377,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.85 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 127.18 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 51.46 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 28.79 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 482989.9750000001
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 471.67 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 471.67 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1162860,
        "css": {
          "unusedBytes": 130230,
          "ratio": 0.1119911253289304,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270185,
          "duplicatedBytes": 0,
          "ratio": 0.2323452522229675,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 130230,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270185,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 19,
        "urgency": "high",
        "transferBytes": 1162860,
        "estimatedDeferrableBytes": 442531,
        "renderBlockingMs": 866,
        "breakdown": {
          "offscreenImageSavings": 42116,
          "unusedJavascriptSavings": 270185,
          "unusedCssSavings": 130230
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270185,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 130230,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 866,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163007,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 812528,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622119,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156155,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2273,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974039716&cv=11&fst=1776974039716&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Fparking%3Futm_source%3DHalifax.ca%26amp%3Butm_medium%3DPopular_links%26amp%3Butm_campaign%3DParking&rcb=7&frm=0&tiba=Parking%20%7C%20Pay%20Stations%20%7C%20Street%20Parking%20%7C%20Permits%20%7C%20Tickets%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 39,
        "urgency": "medium",
        "transferBytes": 1162860,
        "estimatedRedundantBytes": 400415,
        "redundancyRatio": 0.3443363775518979,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270185,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 130230,
            "displayValue": "Est savings of 127 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270185,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 130230,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 31,
        "urgency": "medium",
        "totalTransferBytes": 1162860,
        "heavyRequestCount": 4,
        "heavyBytes": 622119,
        "heavyRatio": 0.5349904545689077,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163007,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622119
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622119
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42116,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270185,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163007,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "10.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 10.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 127 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 127 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 51 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 51 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 870 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 870 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,210 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,210 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/affordable-access-program?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=AAP",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/affordable-access-program?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=AAP",
      "performanceScore": 0.49,
      "bestPracticesScore": 0.79,
      "transferBytes": 1365953,
      "co2Grams": 0.5232711875742001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 5,
            "transferBytes": 622159,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 352728,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173614,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2273,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974057158&cv=11&fst=1776974057158&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Faffordable-access-program%3Futm_source%3DHalifax.ca%26amp%3Butm_medium%3DPopular_links%26amp%3Butm_campaign%3DAAP&rcb=2&frm=0&tiba=Affordable%20Access%20%7C%20Transit%20Pass%20%7C%20Rec%20%7C%20Property%20Tax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Affordable Access | Transit Pass | Rec | Property Tax | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The Affordable Access Program allows residents to apply for municipal assistance with Recreation programming, Halifax Transit and Property Tax payment programs from a single form.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/affordable-access-program",
          "ogTitle": "Affordable Access Program",
          "ogDescription": "The Affordable Access Program allows residents to apply for municipal assistance with Recreation programming, Halifax Transit and Property Tax payment programs from a single form.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/affordable-access-program",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 72,
          "tabletSmallTapTargets": 76,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 72,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 72 small targets on mobile and 76 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:54:29 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 14,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 189951.4,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 66432,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "estimatedSavingsBytes": 59766.4,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 34419,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 64.88 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "medium",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 58.37 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 33.61 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 802178.4,
        "totalEstimatedBlockingMs": 1476,
        "opportunities": [
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 300701,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 294 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269414,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 263 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1476,
            "displayValue": "Est savings of 1,480 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 66432,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 65 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 59766.4,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 58 KiB",
            "urgency": "medium",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 34419,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 34 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 293.65 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.10 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1476 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 64.88 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "medium",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 58.37 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 684648.3666666669
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 668.60 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 668.60 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 19,
        "urgency": "high",
        "transferBytes": 1365953,
        "css": {
          "unusedBytes": 300701,
          "ratio": 0.2201400780261107,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269414,
          "duplicatedBytes": 0,
          "ratio": 0.19723519037624282,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 300701,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269414,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 26,
        "urgency": "high",
        "transferBytes": 1365953,
        "estimatedDeferrableBytes": 612227,
        "renderBlockingMs": 1476,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 269414,
          "unusedCssSavings": 300701
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269414,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 300701,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1476,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 830027,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 5,
            "transferBytes": 622159,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 173614,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11122,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2273,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974057158&cv=11&fst=1776974057158&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Faffordable-access-program%3Futm_source%3DHalifax.ca%26amp%3Butm_medium%3DPopular_links%26amp%3Butm_campaign%3DAAP&rcb=2&frm=0&tiba=Affordable%20Access%20%7C%20Transit%20Pass%20%7C%20Rec%20%7C%20Property%20Tax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 43,
        "urgency": "high",
        "transferBytes": 1365953,
        "estimatedRedundantBytes": 570115,
        "redundancyRatio": 0.4173752684023535,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 300701,
            "displayValue": "Est savings of 294 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269414,
            "displayValue": "Est savings of 263 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 300701,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269414,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 33,
        "urgency": "medium",
        "totalTransferBytes": 1365953,
        "heavyRequestCount": 5,
        "heavyBytes": 785559,
        "heavyRatio": 0.575099582489295,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162244,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622119
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622119
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269414,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "9.6 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 9.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 263 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 263 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 294 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 294 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 58 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 58 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 34 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 34 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,480 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,480 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.81,
          "displayValue": "4.0 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.0 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,175 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,175 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home-property/garbage-recycling-green-cart/garbage-collection?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Solid_Waste",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home-property/garbage-recycling-green-cart/garbage-collection?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Solid_Waste",
      "performanceScore": 0.27,
      "bestPracticesScore": 0.75,
      "transferBytes": 5869221,
      "co2Grams": 2.2483893975894005,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 44,
            "transferBytes": 1643080,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "api.recollect.net",
            "resourceType": "script",
            "requestCount": 7,
            "transferBytes": 754007,
            "sampleUrl": "https://api.recollect.net/api/areas/Halifax/services/waste.json?callback=svc_cb_1776974076303",
            "greenCheck": {
              "hostname": "api.recollect.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:02.657570",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/api.recollect.net",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622114,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 354863,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.pendo.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 188600,
            "sampleUrl": "https://cdn.pendo.io/agent/static/0917d9c3-59ba-4540-6ee5-f6e47e00880e/pendo.js",
            "greenCheck": {
              "hostname": "cdn.pendo.io",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:20:13",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.pendo.io",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156556,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "stylesheet",
            "requestCount": 28,
            "transferBytes": 106019,
            "sampleUrl": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "recollect-us.global.ssl.fastly.net",
            "resourceType": "stylesheet",
            "requestCount": 4,
            "transferBytes": 105240,
            "sampleUrl": "https://recollect-us.global.ssl.fastly.net/0.11.1776954052/api/areas/Halifax/services/waste/style/widget/logan/Default.css",
            "greenCheck": {
              "hostname": "recollect-us.global.ssl.fastly.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:01.787304",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/recollect-us.global.ssl.fastly.net",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 10,
            "transferBytes": 47347,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "assets.ca.recollect.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 41154,
            "sampleUrl": "https://assets.ca.recollect.net/0.11.1776873130/javascript/compiled/recollect-widget-loader-prod-us.js",
            "greenCheck": {
              "hostname": "assets.ca.recollect.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:02.676287",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/assets.ca.recollect.net",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "fonts.googleapis.com",
            "resourceType": "stylesheet",
            "requestCount": 2,
            "transferBytes": 5274,
            "sampleUrl": "https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;0,800;1,300;1,400;1,600;1,700;1,800",
            "greenCheck": {
              "hostname": "fonts.googleapis.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:29",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/fonts.googleapis.com",
              "error": null
            }
          },
          {
            "hostname": "cdnjs.cloudflare.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 4495,
            "sampleUrl": "https://cdnjs.cloudflare.com/ajax/libs/mapbox-gl/1.9.1/mapbox-gl.css",
            "greenCheck": {
              "hostname": "cdnjs.cloudflare.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Cloudflare",
              "hostedByWebsite": "https://www.cloudflare.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:34",
              "supportingDocuments": [
                {
                  "id": 18,
                  "title": "Blog post - The Climate and Cloudflare",
                  "link": "https://blog.cloudflare.com/the-climate-and-cloudflare/"
                },
                {
                  "id": 1264,
                  "title": "Cloudflare 2023 Emissions Inventory",
                  "link": "https://media.greenweb.org/uploads/Cloudflare_2023_Emissions_Inventory.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdnjs.cloudflare.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2277,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974076816&cv=11&fst=1776974076816&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fgarbage-recycling-green-cart%2Fgarbage-collection%3Futm_source%3DHalifax.ca%26amp%3Butm_medium%3DPopular_links%26amp%3Butm_campaign%3DSolid_Waste&rcb=13&frm=0&tiba=Garbage%20collection%20%7C%20Recycling%20%7C%20Green%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "data.pendo.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 877,
            "sampleUrl": "https://data.pendo.io/data/guide.js/0917d9c3-59ba-4540-6ee5-f6e47e00880e?id=23&jzb=eJyFU-9PGzkQ_V9W2v1ENptdIALJOoVSRKWqheNKxSdrsCcbF6_t84-E9MT_zuwmLCD12ihKPJ7n5zdvPP9laxVUtP6TzE4zfvXxy_lX_g-_Vut_3d0juLvL7CADIWwycYBU1az-XNFndtGc4O314m8CJK8ptYrRhdPpFJwqPQqrNYpYGozTzTRE8PEv8AjsErRawmMhMajWMG1bMEVAv1YCuZKsaaqCKPjKhsj-l7P4Ef6EEGEPSUbiUhmUL9ewDYSIhbc2cgctxeoneMkDgherwpFOEzlVtWPPm0VeX9B3s9mUq538UgBtrGyHE-etQx-3FLfg74lvQkK2QivTTlqPaCaCqn-T3qtU1uTNRYodDzZ5gXlzvjdnYD-GzuXNWZ_vUKrUUf7KuqTBc-J-CO8ggpZAhhLoxmol-fehRm0FaGRIFifnrI-8sxLZEnTAwkCHb9zpXX_ALSs2SrYYubBmqVqWz8_yuu57R3-DF_VeZh_XH-i3JxqTOzPH3D2E19x7P9_1azwQV4p6QU2IW5JgHxRyNHCvceBsFiZpnc_PX1Rq2NoUGRUBSVPXhxNspJ44DQILNGtGjZKTFIo1-kDes6qczcrZfH58cnRYHdX0kK2Wt6_z0F90kHUYQUKE7HQcln6pfjMwSzrIe08IQmFUUe-X1tNrJ3_63u92NJg20aOgCA3_dpM9jQM3XvOLoSPU7pkuRixtkc6eqG6m1eG0rupjumBfbb9dNnVVHvLBB2Wzp6dnIzZbRA&v=2.320.4_prod-io&ct=1776974078124",
            "greenCheck": {
              "hostname": "data.pendo.io",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:10:07",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/data.pendo.io",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 14,
            "transferBytes": 495,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 16,
          "greenCount": 11,
          "notGreenCount": 6,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 45,
        "urgency": "medium",
        "pageElementOccurrences": 2,
        "uniqueElementsAssessed": 2,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "no-form|input|search|anonymous|off|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "search",
            "fieldName": null,
            "formContext": "no-form",
            "hasLabel": true,
            "hasValidationRule": false,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 60,
              "urgency": "high",
              "issues": [
                "No explicit validation rule",
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Define validation constraints (required, pattern, min/max, or semantic input type).",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "2 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "2 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "No explicit validation rule",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Garbage collection | Recycling | Green | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Garbage collection in Halifax",
          "robots": "",
          "canonical": "https://www.halifax.ca/home-property/garbage-recycling-green-cart/garbage-collection",
          "ogTitle": "Garbage collection",
          "ogDescription": "Garbage collection in Halifax",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home-property/garbage-recycling-green-cart/garbage-collection",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 35,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 46,
          "tabletSmallTapTargets": 105,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 3,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 1,
          "gridOverflowContainers": 1,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 46,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 105,
            "oversizedMedia": 0,
            "gridContainersDetected": 2,
            "gridOverflowContainers": 1
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 46 small targets on mobile and 105 on tablet."
          },
          {
            "title": "Make grid layouts breakpoint-aware",
            "urgency": "medium",
            "detail": "1 grid container(s) overflowed across tested viewports (0 on mobile, 1 on tablet). Use intrinsic tracks (minmax(), fr), wrapping, and breakpoint-aware grid templates."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 59,
          "externalScriptsWithoutIntegrity": 59,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:55:04 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "59 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 15,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 15
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "15 of 15 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 15,
            "lazyImages": 0,
            "totalIframes": 8,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/15 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 12,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 706801.55,
        "checks": {
          "hasEffectiveTextCompression": false
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 583765.55,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 66485,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25405,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "uses-text-compression",
            "title": "Enable Brotli/gzip for text assets",
            "urgency": "low",
            "estimatedSavingsBytes": 6255,
            "detail": "Compress HTML, CSS, JS, JSON, SVG, and XML responses with Brotli or gzip."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 570.08 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 64.93 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
          },
          {
            "title": "Enable Brotli/gzip for text assets",
            "urgency": "low",
            "detail": "Compress HTML, CSS, JS, JSON, SVG, and XML responses with Brotli or gzip. Estimated savings: 6.11 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1845452.55,
        "totalEstimatedBlockingMs": 2800,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 583765.55,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 570 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 489909,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 478 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 346221,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 338 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 302521,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 295 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2800,
            "displayValue": "Est savings of 2,800 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 66485,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 65 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25405,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "uses-text-compression",
            "title": "Enable text compression",
            "detail": "Serve text assets with Brotli or gzip to remove avoidable transfer bloat.",
            "estimatedSavingsBytes": 6255,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 6 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-text-compression"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 570.08 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 478.43 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 338.11 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 295.43 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 2800 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 64.93 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 59,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "59 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1880179.771799349
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.79 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.79 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 8,
        "urgency": "high",
        "transferBytes": 5869221,
        "css": {
          "unusedBytes": 346221,
          "ratio": 0.058989259392345256,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 489909,
          "duplicatedBytes": 0,
          "ratio": 0.08347087288074516,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 346221,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 489909,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 20,
        "urgency": "high",
        "transferBytes": 5869221,
        "estimatedDeferrableBytes": 1138651,
        "renderBlockingMs": 2800,
        "breakdown": {
          "offscreenImageSavings": 302521,
          "unusedJavascriptSavings": 489909,
          "unusedCssSavings": 346221
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 302521,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 489909,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 346221,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 2800,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.youtube.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 483689,
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from api.recollect.net",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 342832,
            "url": "https://api.recollect.net/0.11.1776954052/javascript/compiled/recollect-widget-prod-us.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 90,
        "urgency": "high",
        "providerCount": 11,
        "requestCount": 131,
        "transferBytes": 3477366,
        "notGreenCount": 3,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 44,
            "transferBytes": 1643080,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "api.recollect.net",
            "resourceType": "script",
            "requestCount": 7,
            "transferBytes": 754007,
            "sampleUrl": "https://api.recollect.net/api/areas/Halifax/services/waste.json?callback=svc_cb_1776974076303",
            "greenCheck": {
              "hostname": "api.recollect.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:02.657570",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/api.recollect.net",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622114,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.pendo.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 188600,
            "sampleUrl": "https://cdn.pendo.io/agent/static/0917d9c3-59ba-4540-6ee5-f6e47e00880e/pendo.js",
            "greenCheck": {
              "hostname": "cdn.pendo.io",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:20:13",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.pendo.io",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156556,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 10,
            "transferBytes": 47347,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "assets.ca.recollect.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 41154,
            "sampleUrl": "https://assets.ca.recollect.net/0.11.1776873130/javascript/compiled/recollect-widget-loader-prod-us.js",
            "greenCheck": {
              "hostname": "assets.ca.recollect.net",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:33:02.676287",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/assets.ca.recollect.net",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2277,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974076816&cv=11&fst=1776974076816&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome-property%2Fgarbage-recycling-green-cart%2Fgarbage-collection%3Futm_source%3DHalifax.ca%26amp%3Butm_medium%3DPopular_links%26amp%3Butm_campaign%3DSolid_Waste&rcb=13&frm=0&tiba=Garbage%20collection%20%7C%20Recycling%20%7C%20Green%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "data.pendo.io",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 877,
            "sampleUrl": "https://data.pendo.io/data/guide.js/0917d9c3-59ba-4540-6ee5-f6e47e00880e?id=23&jzb=eJyFU-9PGzkQ_V9W2v1ENptdIALJOoVSRKWqheNKxSdrsCcbF6_t84-E9MT_zuwmLCD12ihKPJ7n5zdvPP9laxVUtP6TzE4zfvXxy_lX_g-_Vut_3d0juLvL7CADIWwycYBU1az-XNFndtGc4O314m8CJK8ptYrRhdPpFJwqPQqrNYpYGozTzTRE8PEv8AjsErRawmMhMajWMG1bMEVAv1YCuZKsaaqCKPjKhsj-l7P4Ef6EEGEPSUbiUhmUL9ewDYSIhbc2cgctxeoneMkDgherwpFOEzlVtWPPm0VeX9B3s9mUq538UgBtrGyHE-etQx-3FLfg74lvQkK2QivTTlqPaCaCqn-T3qtU1uTNRYodDzZ5gXlzvjdnYD-GzuXNWZ_vUKrUUf7KuqTBc-J-CO8ggpZAhhLoxmol-fehRm0FaGRIFifnrI-8sxLZEnTAwkCHb9zpXX_ALSs2SrYYubBmqVqWz8_yuu57R3-DF_VeZh_XH-i3JxqTOzPH3D2E19x7P9_1azwQV4p6QU2IW5JgHxRyNHCvceBsFiZpnc_PX1Rq2NoUGRUBSVPXhxNspJ44DQILNGtGjZKTFIo1-kDes6qczcrZfH58cnRYHdX0kK2Wt6_z0F90kHUYQUKE7HQcln6pfjMwSzrIe08IQmFUUe-X1tNrJ3_63u92NJg20aOgCA3_dpM9jQM3XvOLoSPU7pkuRixtkc6eqG6m1eG0rupjumBfbb9dNnVVHvLBB2Wzp6dnIzZbRA&v=2.320.4_prod-io&ct=1776974078124",
            "greenCheck": {
              "hostname": "data.pendo.io",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:10:07",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/data.pendo.io",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 14,
            "transferBytes": 495,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 11 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "3 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 33,
        "urgency": "high",
        "transferBytes": 5869221,
        "estimatedRedundantBytes": 836130,
        "redundancyRatio": 0.14246013227309043,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 489909,
            "displayValue": "Est savings of 478 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 346221,
            "displayValue": "Est savings of 338 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 489909,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 346221,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Enable and verify text compression",
            "urgency": "medium",
            "estimatedSavingsBytes": 6255,
            "auditId": "uses-text-compression",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 41,
        "urgency": "high",
        "totalTransferBytes": 5869221,
        "heavyRequestCount": 22,
        "heavyBytes": 4078926,
        "heavyRatio": 0.6949688893977582,
        "heavyRequests": [
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "transferSize": 483689,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed_es6.vflset/en_US/base.js",
            "transferSize": 446736,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://api.recollect.net/0.11.1776954052/javascript/compiled/recollect-widget-prod-us.js",
            "transferSize": 342832,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "api.recollect.net"
          },
          {
            "url": "https://api.recollect.net/0.11.1776954052/javascript/compiled/recollect-widget-prod-us.js",
            "transferSize": 342787,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "api.recollect.net"
          },
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/exm=base,root/ed=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=r78Drb",
            "transferSize": 208632,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/exm=base,root/ed=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=r78Drb",
            "transferSize": 188799,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://cdn.pendo.io/agent/static/0917d9c3-59ba-4540-6ee5-f6e47e00880e/pendo.js",
            "transferSize": 188600,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "cdn.pendo.io"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163452,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163007,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=root,base",
            "transferSize": 160576,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "transferSize": 143526,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136493,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://recollect-images.global.ssl.fastly.net/api/image/500/material.default.paint_can_empty.svg",
            "transferSize": 116636,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "recollect-images.global.ssl.fastly.net"
          },
          {
            "url": "https://recollect-images.global.ssl.fastly.net/api/image/500/material.default.furniture.svg",
            "transferSize": 111839,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "recollect-images.global.ssl.fastly.net"
          },
          {
            "url": "https://recollect-images.global.ssl.fastly.net/api/image/500/material.default.milk_carton.svg",
            "transferSize": 106176,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "recollect-images.global.ssl.fastly.net"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "transferSize": 59163,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://recollect-us.global.ssl.fastly.net/0.11.1776954052/api/areas/Halifax/services/waste/style/widget/logan/Default.css",
            "transferSize": 49379,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "recollect-us.global.ssl.fastly.net"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 13,
            "transferBytes": 3128291
          },
          {
            "resourceType": "image",
            "count": 4,
            "transferBytes": 582406
          },
          {
            "resourceType": "stylesheet",
            "count": 5,
            "transferBytes": 368229
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.youtube.com",
            "count": 8,
            "transferBytes": 1737977
          },
          {
            "domain": "api.recollect.net",
            "count": 2,
            "transferBytes": 685619
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622114
          },
          {
            "domain": "recollect-images.global.ssl.fastly.net",
            "count": 3,
            "transferBytes": 334651
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "domain": "cdn.pendo.io",
            "count": 1,
            "transferBytes": 188600
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163452
          },
          {
            "domain": "recollect-us.global.ssl.fastly.net",
            "count": 2,
            "transferBytes": 98758
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 302521,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 489909,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.youtube.com",
            "urgency": "high",
            "estimatedSavingsBytes": 483689,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from api.recollect.net",
            "urgency": "high",
            "estimatedSavingsBytes": 342832,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://api.recollect.net/0.11.1776954052/javascript/compiled/recollect-widget-prod-us.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "11.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 11.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.16,
          "displayValue": "8.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 8.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 478 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 478 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 338 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 338 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 2,800 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 2,800 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-rel-preconnect",
          "title": "Preconnect to required origins",
          "description": "Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).",
          "score": 0,
          "displayValue": "Est savings of 340 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Preconnect to required origins\n\n- Lighthouse audit: uses-rel-preconnect\n- Current value: Est savings of 340 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nConsider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn how to preconnect to required origins](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 570 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 570 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 295 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 295 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-text-compression",
          "title": "Enable text compression",
          "description": "Text-based resources should be served with compression (gzip, deflate or brotli) to minimize total network bytes. [Learn more about text compression](https://developer.chrome.com/docs/lighthouse/performance/uses-text-compression/).",
          "score": 0.5,
          "displayValue": "Est savings of 6 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Enable text compression\n\n- Lighthouse audit: uses-text-compression\n- Current value: Est savings of 6 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nText-based resources should be served with compression (gzip, deflate or brotli) to minimize total network bytes. [Learn more about text compression](https://developer.chrome.com/docs/lighthouse/performance/uses-text-compression/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 5,732 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 5,732 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,763 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,763 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/environment-climate-change/halifact-acting-climate-together",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/environment-climate-change/halifact-acting-climate-together",
      "performanceScore": 0.61,
      "bestPracticesScore": 0.79,
      "transferBytes": 4178988,
      "co2Grams": 1.6008925736232,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 8,
            "transferBytes": 1454243,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622116,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 162321,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157423,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "stylesheet",
            "requestCount": 4,
            "transferBytes": 106011,
            "sampleUrl": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 23611,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2275,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974117819&cv=11&fst=1776974117819&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938466~115938468~117266400~117884344~118128922&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fenvironment-climate-change%2Fhalifact-acting-climate-together&rcb=0&frm=0&tiba=HalifACT%20%7C%20Adapt%20%7C%20Climate%20%7C%20Emissions%20%7C%20Energy%20%7C%20Community%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 0,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 9,
          "greenCount": 7,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "HalifACT | Adapt | Climate | Emissions | Energy | Community | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "HalifACT is a long-term climate change plan to reduce emissions and help our community adapt.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/environment-climate-change/halifact-acting-climate-together",
          "ogTitle": "HalifACT: Acting on Climate Together",
          "ogDescription": "HalifACT is a long-term climate change plan to reduce emissions and help our community adapt.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/environment-climate-change/halifact-acting-climate-together",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 90,
          "tabletSmallTapTargets": 102,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 90,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 102,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 90 small targets on mobile and 102 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 53,
          "externalScriptsWithoutIntegrity": 53,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:55:34 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "53 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 22,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 22
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "22 of 22 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 22,
            "lazyImages": 0,
            "totalIframes": 1,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/22 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 25,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 1039790.55,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 957057.55,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26342,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 31500,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 934.63 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.72 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 30.76 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 2614607.55,
        "totalEstimatedBlockingMs": 1032,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 957057.55,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 935 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 805909,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 787 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 382594,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 374 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269925,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1032,
            "displayValue": "Est savings of 1,030 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 116389,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 114 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26342,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 31500,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 31 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 934.63 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 787.02 KB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "high",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 373.63 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.60 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1032 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 113.66 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 53,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "53 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 1718958.1833333333
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.64 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 1.64 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 6,
        "urgency": "high",
        "transferBytes": 4178988,
        "css": {
          "unusedBytes": 116389,
          "ratio": 0.027851001247191903,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269925,
          "duplicatedBytes": 0,
          "ratio": 0.06459099667192153,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 116389,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269925,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 20,
        "urgency": "high",
        "transferBytes": 4178988,
        "estimatedDeferrableBytes": 1192223,
        "renderBlockingMs": 1032,
        "breakdown": {
          "offscreenImageSavings": 805909,
          "unusedJavascriptSavings": 269925,
          "unusedCssSavings": 116389
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 805909,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269925,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 116389,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1032,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 507381,
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2023-07/halifact-plan_1.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.youtube.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 483680,
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 7,
        "requestCount": 64,
        "transferBytes": 2280527,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 8,
            "transferBytes": 1454243,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622116,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157423,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 23611,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2275,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974117819&cv=11&fst=1776974117819&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938466~115938468~117266400~117884344~118128922&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fenvironment-climate-change%2Fhalifact-acting-climate-together&rcb=0&frm=0&tiba=HalifACT%20%7C%20Adapt%20%7C%20Climate%20%7C%20Emissions%20%7C%20Energy%20%7C%20Community%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 0,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 7 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 25,
        "urgency": "medium",
        "transferBytes": 4178988,
        "estimatedRedundantBytes": 386314,
        "redundancyRatio": 0.09244199791911344,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269925,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 116389,
            "displayValue": "Est savings of 114 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269925,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 116389,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 45,
        "urgency": "high",
        "totalTransferBytes": 4178988,
        "heavyRequestCount": 15,
        "heavyBytes": 3162268,
        "heavyRatio": 0.7567066476381363,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2023-07/halifact-plan_1.png",
            "transferSize": 507381,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "transferSize": 483680,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed_es6.vflset/en_US/base.js",
            "transferSize": 446732,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/exm=base,root/ed=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=r78Drb",
            "transferSize": 208622,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163004,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=root,base",
            "transferSize": 160566,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "transferSize": 143521,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2023-07/solar-pvcaset.png",
            "transferSize": 121088,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2023-07/phs-image.jpg",
            "transferSize": 114796,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "transferSize": 59160,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/ss/k=ytembeds.base.oRmnRxCtskc.L.W.O/am=AAAABA/d=0/br=1/rs=AGKMywHkqPKx19LNLTFOD88ZyDOWYDGFJw",
            "transferSize": 46851,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 9,
            "transferBytes": 2065237
          },
          {
            "resourceType": "image",
            "count": 4,
            "transferBytes": 991020
          },
          {
            "resourceType": "stylesheet",
            "count": 2,
            "transferBytes": 106011
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.youtube.com",
            "count": 7,
            "transferBytes": 1549132
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 3,
            "transferBytes": 743265
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622116
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 805909,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269925,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 507381,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2023-07/halifact-plan_1.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.youtube.com",
            "urgency": "high",
            "estimatedSavingsBytes": 483680,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.47,
          "displayValue": "4.1 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 114 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 114 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,030 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,030 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.59,
          "displayValue": "5.2 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 935 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 935 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 31 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 31 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 787 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 787 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 4,081 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 4,081 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,604 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,604 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/transportation/transportation-projects/windsor-street-exchange-redevelopment-project",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/transportation/transportation-projects/windsor-street-exchange-redevelopment-project",
      "performanceScore": 0.44,
      "bestPracticesScore": 0.79,
      "transferBytes": 1131995,
      "co2Grams": 0.433646229393,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622106,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 176552,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156555,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11101,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2239,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974143602&cv=11&fst=1776974143602&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Ftransportation-projects%2Fwindsor-street-exchange-redevelopment-project&rcb=14&frm=0&tiba=Windsor%20Street%20Exchange%20project%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Windsor Street Exchange project | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The Windsor Street Exchange project will significantly improve how people and goods move through one of Halifax's busiest transportation corridors.",
          "robots": "",
          "canonical": "https://www.halifax.ca/transportation/transportation-projects/windsor-street-exchange-redevelopment-project",
          "ogTitle": "Windsor Street Exchange Redevelopment project",
          "ogDescription": "The Windsor Street Exchange project will significantly improve how people and goods move through one of Halifax's busiest transportation corridors.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/transportation/transportation-projects/windsor-street-exchange-redevelopment-project",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 73,
          "tabletSmallTapTargets": 79,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 73,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 79,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 73 small targets on mobile and 79 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 47,
          "externalScriptsWithoutIntegrity": 47,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:55:55 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "47 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 10,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 110155.04999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29502,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30357.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25405,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.81 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.65 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 553265.05,
        "totalEstimatedBlockingMs": 1894,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270746,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 130209,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 127 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1894,
            "displayValue": "Est savings of 1,890 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42155,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 29502,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30357.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25405,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.40 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 127.16 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1894 ms."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.17 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 28.81 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 47,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "47 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 452469.45
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 441.86 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 441.86 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 1131995,
        "css": {
          "unusedBytes": 130209,
          "ratio": 0.1150261264404878,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270746,
          "duplicatedBytes": 0,
          "ratio": 0.23917596809173186,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 130209,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270746,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 26,
        "urgency": "high",
        "transferBytes": 1131995,
        "estimatedDeferrableBytes": 443110,
        "renderBlockingMs": 1894,
        "breakdown": {
          "offscreenImageSavings": 42155,
          "unusedJavascriptSavings": 270746,
          "unusedCssSavings": 130209
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42155,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270746,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 130209,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1894,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 162999,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 54,
        "transferBytes": 812860,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622106,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 46,
            "transferBytes": 156555,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11101,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2239,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974143602&cv=11&fst=1776974143602&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Ftransportation%2Ftransportation-projects%2Fwindsor-street-exchange-redevelopment-project&rcb=14&frm=0&tiba=Windsor%20Street%20Exchange%20project%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 39,
        "urgency": "medium",
        "transferBytes": 1131995,
        "estimatedRedundantBytes": 400955,
        "redundancyRatio": 0.3542020945322197,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270746,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 130209,
            "displayValue": "Est savings of 127 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270746,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 130209,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 32,
        "urgency": "medium",
        "totalTransferBytes": 1131995,
        "heavyRequestCount": 4,
        "heavyBytes": 622106,
        "heavyRatio": 0.5495660316520833,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 162999,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136493,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622106
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622106
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42155,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270746,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 162999,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "11.6 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 11.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.4,
          "displayValue": "6.4 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 6.4 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 127 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 127 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,890 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,890 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,300 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,300 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,224 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,224 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/employment/work-halifax-regional-municipality?utm_source=Home_Page&amp;utm_medium=Banner&amp;utm_campaign=Recruitment",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/employment/work-halifax-regional-municipality?utm_source=Home_Page&amp;utm_medium=Banner&amp;utm_campaign=Recruitment",
      "performanceScore": 0.6,
      "bestPracticesScore": 0.75,
      "transferBytes": 2719216,
      "co2Grams": 1.0416810721824001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 7,
            "transferBytes": 863966,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622119,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 162305,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157423,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "stylesheet",
            "requestCount": 4,
            "transferBytes": 106017,
            "sampleUrl": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 23611,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2309,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974163103&cv=11&fst=1776974163103&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~117884344~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Femployment%2Fwork-halifax-regional-municipality%3Futm_source%3DHome_Page%26amp%3Butm_medium%3DBanner%26amp%3Butm_campaign%3DRecruitment&rcb=14&frm=0&tiba=Jobs%20%7C%20Careers%20%7C%20Employment%20%7C%20Diversity%20%7C%20Inclusion%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 496,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 9,
          "greenCount": 7,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Jobs | Careers | Employment | Diversity | Inclusion | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Work where you live, love where you work. Learn more about how you can apply for a job, prepare for an interview, the hiring process and our commitment to diversity and inclusion.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/employment/work-halifax-regional-municipality",
          "ogTitle": "Work with the Halifax Regional Municipality",
          "ogDescription": "Work where you live, love where you work. Learn more about how you can apply for a job, prepare for an interview, the hiring process and our commitment to diversity and inclusion.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/employment/work-halifax-regional-municipality",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 74,
          "tabletSmallTapTargets": 83,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 74,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 83,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 74 small targets on mobile and 83 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 54,
          "externalScriptsWithoutIntegrity": 54,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:56:16 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "54 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 16,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 16
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "16 of 16 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 16,
            "lazyImages": 0,
            "totalIframes": 1,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/16 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 13,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 344484,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 210709.99999999997,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 82547,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26336,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 205.77 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 80.61 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.72 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 857049,
        "totalEstimatedBlockingMs": 621,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269849,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 210709.99999999997,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 206 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 116389,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 114 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 84215,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 82 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 82547,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 81 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26336,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 621,
            "displayValue": "Est savings of 620 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.52 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 205.77 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 113.66 KB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "medium",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 82.24 KB."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 80.61 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 54,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "54 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 849493.5583333336
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 829.58 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 829.58 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 8,
        "urgency": "high",
        "transferBytes": 2719216,
        "css": {
          "unusedBytes": 116389,
          "ratio": 0.04280241069484734,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269849,
          "duplicatedBytes": 0,
          "ratio": 0.09923779501150332,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 116389,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269849,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 11,
        "urgency": "high",
        "transferBytes": 2719216,
        "estimatedDeferrableBytes": 428350,
        "renderBlockingMs": 621,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 269849,
          "unusedCssSavings": 116389
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269849,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 116389,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 621,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.youtube.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 483683,
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 7,
        "requestCount": 62,
        "transferBytes": 1690783,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 7,
            "transferBytes": 863966,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622119,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157423,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 23611,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2309,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974163103&cv=11&fst=1776974163103&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~117884344~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Femployment%2Fwork-halifax-regional-municipality%3Futm_source%3DHome_Page%26amp%3Butm_medium%3DBanner%26amp%3Butm_campaign%3DRecruitment&rcb=14&frm=0&tiba=Jobs%20%7C%20Careers%20%7C%20Employment%20%7C%20Diversity%20%7C%20Inclusion%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 496,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 7 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 28,
        "urgency": "medium",
        "transferBytes": 2719216,
        "estimatedRedundantBytes": 386238,
        "redundancyRatio": 0.14204020570635065,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269849,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 116389,
            "displayValue": "Est savings of 114 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269849,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 116389,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 35,
        "urgency": "high",
        "totalTransferBytes": 2719216,
        "heavyRequestCount": 9,
        "heavyBytes": 1581015,
        "heavyRatio": 0.5814231013645109,
        "heavyRequests": [
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "transferSize": 483683,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/exm=base,root/ed=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=r78Drb",
            "transferSize": 208626,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=root,base",
            "transferSize": 160570,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160360,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "transferSize": 59162,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/ss/k=ytembeds.base.oRmnRxCtskc.L.W.O/am=AAAABA/d=0/br=1/rs=AGKMywHkqPKx19LNLTFOD88ZyDOWYDGFJw",
            "transferSize": 46855,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 7,
            "transferBytes": 1474998
          },
          {
            "resourceType": "stylesheet",
            "count": 2,
            "transferBytes": 106017
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.youtube.com",
            "count": 5,
            "transferBytes": 958896
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622119
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269849,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.youtube.com",
            "urgency": "high",
            "estimatedSavingsBytes": 483683,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.32,
          "displayValue": "4.7 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.7 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 114 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 114 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 620 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 620 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 900 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 900 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.6,
          "displayValue": "5.2 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 206 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 206 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 81 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 81 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,327 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,327 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/safety-security/police/reporting-crime",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security/police/reporting-crime",
      "performanceScore": 0.46,
      "bestPracticesScore": 0.75,
      "transferBytes": 1396192,
      "co2Grams": 0.5348551860288002,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622121,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 339726,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174923,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11071,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2213,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974183911&cv=11&fst=1776974183911&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Fpolice%2Freporting-crime&rcb=15&frm=0&tiba=Reporting%20crime%20%7C%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Reporting crime | Halifax | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "How to report crime in the Halifax-area.",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security/police/reporting-crime",
          "ogTitle": "Reporting crime in Halifax",
          "ogDescription": "How to report crime in the Halifax-area.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security/police/reporting-crime",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 72,
          "tabletSmallTapTargets": 84,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 72,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 84,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 72 small targets on mobile and 84 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:56:35 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 44,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 10,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 10 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 10,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/10 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 157545.2,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 63485,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 39352.2,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 62.00 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 38.43 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 758620.2,
        "totalEstimatedBlockingMs": 1798,
        "opportunities": [
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 287725,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 281 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 271238,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1798,
            "displayValue": "Est savings of 1,800 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 63485,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 62 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 39352.2,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 38 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 280.98 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.88 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1798 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 62.00 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 28.65 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 710361.291666667
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 693.71 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 693.71 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 18,
        "urgency": "high",
        "transferBytes": 1396192,
        "css": {
          "unusedBytes": 287725,
          "ratio": 0.20607839036464898,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 271238,
          "duplicatedBytes": 0,
          "ratio": 0.19426984254314592,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 287725,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 271238,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 26,
        "urgency": "high",
        "transferBytes": 1396192,
        "estimatedDeferrableBytes": 601075,
        "renderBlockingMs": 1798,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 271238,
          "unusedCssSavings": 287725
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 271238,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 287725,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1798,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy stylesheet from cdn.halifax.ca",
            "area": "stylesheet",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163009,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 831187,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622121,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174923,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11071,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2213,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974183911&cv=11&fst=1776974183911&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616986~115938465~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Fpolice%2Freporting-crime&rcb=15&frm=0&tiba=Reporting%20crime%20%7C%20Halifax%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 42,
        "urgency": "high",
        "transferBytes": 1396192,
        "estimatedRedundantBytes": 558963,
        "redundancyRatio": 0.4003482329077949,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 287725,
            "displayValue": "Est savings of 281 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 271238,
            "displayValue": "Est savings of 265 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 287725,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 271238,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 32,
        "urgency": "medium",
        "totalTransferBytes": 1396192,
        "heavyRequestCount": 5,
        "heavyBytes": 785561,
        "heavyRatio": 0.5626453954756939,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163440,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163009,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622121
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622121
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 163440
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 271238,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy stylesheet asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 163440,
            "strategy": "Split this stylesheet so component-specific CSS is delivered only when the component is rendered.",
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163009,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.26,
          "displayValue": "5.1 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 5.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 281 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 281 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0,
          "displayValue": "Est savings of 38 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 38 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0,
          "displayValue": "Est savings of 25 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0,
          "displayValue": "Est savings of 41 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,800 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,800 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.77,
          "displayValue": "4.2 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 265 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,462 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,462 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/online-services",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home/online-services",
      "performanceScore": 0.64,
      "bestPracticesScore": 0.79,
      "transferBytes": 1153030,
      "co2Grams": 0.44170434664200003,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 52,
            "transferBytes": 170302,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 139895,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11077,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2192,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974202813&cv=11&fst=1776974202813&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome%2Fonline-services&rcb=12&frm=0&tiba=Online%20Services%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 2,
        "uniqueElementsAssessed": 2,
        "reusedFromCacheCount": 2,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "form|get|/home/online-services|input|text|ols|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "ols",
            "formContext": "form|get|/home/online-services",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "2 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "2 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Online Services | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "View and select an online service.",
          "robots": "",
          "canonical": "https://www.halifax.ca/home/online-services",
          "ogTitle": "Online Services",
          "ogDescription": "View and select an online service.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home/online-services",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 143,
          "tabletSmallTapTargets": 173,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 0,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 143,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 173,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 143 small targets on mobile and 173 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 53,
          "externalScriptsWithoutIntegrity": 53,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:56:54 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "53 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 9,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 104223.04999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 27348,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 21175,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30326.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25374,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 26.71 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 20.68 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.62 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 510328.05,
        "totalEstimatedBlockingMs": 818,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270393,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 93600,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 91 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42112,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 27348,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 27 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 21175,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 21 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 818,
            "displayValue": "Est savings of 820 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30326.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25374,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.06 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 91.41 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.13 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 26.71 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 20.68 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "medium",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 818 ms."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 53,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "53 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 450383.9750000002
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 439.83 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 439.83 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1153030,
        "css": {
          "unusedBytes": 93600,
          "ratio": 0.0811774194947226,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270393,
          "duplicatedBytes": 0,
          "ratio": 0.23450647424611676,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 93600,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270393,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 18,
        "urgency": "medium",
        "transferBytes": 1153030,
        "estimatedDeferrableBytes": 406105,
        "renderBlockingMs": 818,
        "breakdown": {
          "offscreenImageSavings": 42112,
          "unusedJavascriptSavings": 270393,
          "unusedCssSavings": 93600
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270393,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 93600,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 818,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 60,
        "transferBytes": 826554,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 52,
            "transferBytes": 170302,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11077,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2192,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974202813&cv=11&fst=1776974202813&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome%2Fonline-services&rcb=12&frm=0&tiba=Online%20Services%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 35,
        "urgency": "medium",
        "transferBytes": 1153030,
        "estimatedRedundantBytes": 363993,
        "redundancyRatio": 0.3156838937408393,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270393,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 93600,
            "displayValue": "Est savings of 91 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270393,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 93600,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 31,
        "urgency": "medium",
        "totalTransferBytes": 1153030,
        "heavyRequestCount": 4,
        "heavyBytes": 622124,
        "heavyRatio": 0.5395557791210983,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622124
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622124
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42112,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270393,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.18,
          "displayValue": "5.6 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 5.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 91 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 91 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 820 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 820 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.88,
          "displayValue": "3.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "2,652 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 2,652 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/safety-security/fire-emergency/recruitment-volunteers",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/safety-security/fire-emergency/recruitment-volunteers",
      "performanceScore": 0.4,
      "bestPracticesScore": 0.75,
      "transferBytes": 6108979,
      "co2Grams": 2.3402362278905997,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "hrm.maps.arcgis.com",
            "resourceType": "script",
            "requestCount": 619,
            "transferBytes": 2585762,
            "sampleUrl": "https://hrm.maps.arcgis.com/apps/instant/_astro/SetComponentsAssetPaths.astro_astro_type_script_index_0_lang.DkvzSypa.js",
            "greenCheck": {
              "hostname": "hrm.maps.arcgis.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:40:30.804323",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/hrm.maps.arcgis.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 8,
            "transferBytes": 1643068,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 178012,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156509,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "stylesheet",
            "requestCount": 4,
            "transferBytes": 106034,
            "sampleUrl": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "js.arcgis.com",
            "resourceType": "stylesheet",
            "requestCount": 1,
            "transferBytes": 37502,
            "sampleUrl": "https://js.arcgis.com/5.0/esri/themes/light/main.css",
            "greenCheck": {
              "hostname": "js.arcgis.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:40:30.012703",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/js.arcgis.com",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 23611,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "hrm.maps.arcgis.com",
            "resourceType": "stylesheet",
            "requestCount": 3,
            "transferBytes": 12841,
            "sampleUrl": "https://hrm.maps.arcgis.com/apps/instant/_astro/index.CU929Heg.css",
            "greenCheck": {
              "hostname": "hrm.maps.arcgis.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:40:30.804323",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/hrm.maps.arcgis.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2247,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974221793&cv=11&fst=1776974221793&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Ffire-emergency%2Frecruitment-volunteers&rcb=11&frm=0&tiba=Volunteer%20firefighters%20%7C%20Halifax%20Regional%20Municipality%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 496,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 12,
          "greenCount": 7,
          "notGreenCount": 6,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Volunteer firefighters | Halifax Regional Municipality | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "With over 550 volunteer firefighters across HRM, these members are critical to our emergency response. There are 22 volunteer only stations, 14 combined 24-hour career and volunteer stations and seven weekday career and volunteer stations.",
          "robots": "",
          "canonical": "https://www.halifax.ca/safety-security/fire-emergency/recruitment-volunteers",
          "ogTitle": "Volunteer firefighters in HRM",
          "ogDescription": "With over 550 volunteer firefighters across HRM, these members are critical to our emergency response. There are 22 volunteer only stations, 14 combined 24-hour career and volunteer stations and seven weekday career and volunteer stations.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/safety-security/fire-emergency/recruitment-volunteers",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 23,
          "tabletSmallTapTargets": 76,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 23,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 76,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 23 small targets on mobile and 76 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 55,
          "externalScriptsWithoutIntegrity": 55,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:57:24 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "55 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 45,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 11,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 10
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "10 of 11 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 11,
            "lazyImages": 1,
            "totalIframes": 2,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/11 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 6,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 346383.8,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 266524.8,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29566,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25402,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.28 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.87 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.81 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1034612.8,
        "totalEstimatedBlockingMs": 1731,
        "opportunities": [
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 289631,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 283 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 267942,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 262 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 266524.8,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 260 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 130656,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 128 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1731,
            "displayValue": "Est savings of 1,730 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 29566,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25402,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 282.84 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 261.66 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 260.28 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 127.59 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1731 ms."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 28.87 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 55,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "55 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 3002680.454166662
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 2.86 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 2.86 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 5,
        "urgency": "high",
        "transferBytes": 6108979,
        "css": {
          "unusedBytes": 130656,
          "ratio": 0.021387534643677774,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 267942,
          "duplicatedBytes": 0,
          "ratio": 0.04386035702529015,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 130656,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 267942,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 18,
        "urgency": "high",
        "transferBytes": 6108979,
        "estimatedDeferrableBytes": 688229,
        "renderBlockingMs": 1731,
        "breakdown": {
          "offscreenImageSavings": 289631,
          "unusedJavascriptSavings": 267942,
          "unusedCssSavings": 130656
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 289631,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 267942,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 130656,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1731,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.youtube.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 483692,
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from hrm.maps.arcgis.com",
            "area": "script",
            "urgency": "high",
            "estimatedSavingsBytes": 213557,
            "url": "https://hrm.maps.arcgis.com/apps/instant/_astro/ShadowCastClear.glsl.BmBV6Wsz.js",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 85,
        "urgency": "high",
        "providerCount": 8,
        "requestCount": 684,
        "transferBytes": 5054676,
        "notGreenCount": 2,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "hrm.maps.arcgis.com",
            "resourceType": "script",
            "requestCount": 619,
            "transferBytes": 2585762,
            "sampleUrl": "https://hrm.maps.arcgis.com/apps/instant/_astro/SetComponentsAssetPaths.astro_astro_type_script_index_0_lang.DkvzSypa.js",
            "greenCheck": {
              "hostname": "hrm.maps.arcgis.com",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:40:30.804323",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/hrm.maps.arcgis.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 8,
            "transferBytes": 1643068,
            "sampleUrl": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156509,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 23611,
            "sampleUrl": "https://www.google.com/js/th/cN4AN9hxcU4NRvji1RMUfz3eri06TDMd9Q_fvSbDV9Q.js",
            "greenCheck": {
              "hostname": "www.google.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-20T21:37:25",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google.com",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2247,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974221793&cv=11&fst=1776974221793&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fsafety-security%2Ffire-emergency%2Frecruitment-volunteers&rcb=11&frm=0&tiba=Volunteer%20firefighters%20%7C%20Halifax%20Regional%20Municipality%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          },
          {
            "hostname": "static.doubleclick.net",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 496,
            "sampleUrl": "https://static.doubleclick.net/instream/ad_status.js",
            "greenCheck": {
              "hostname": "static.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:23",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/static.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 8 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "2 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 21,
        "urgency": "medium",
        "transferBytes": 6108979,
        "estimatedRedundantBytes": 398598,
        "redundancyRatio": 0.06524789166896793,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 267942,
            "displayValue": "Est savings of 262 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 130656,
            "displayValue": "Est savings of 128 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 267942,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 130656,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 32,
        "urgency": "high",
        "totalTransferBytes": 6108979,
        "heavyRequestCount": 17,
        "heavyBytes": 3139045,
        "heavyRatio": 0.5138411836085867,
        "heavyRequests": [
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "transferSize": 483692,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed_es6.vflset/en_US/base.js",
            "transferSize": 446743,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://hrm.maps.arcgis.com/apps/instant/_astro/ShadowCastClear.glsl.BmBV6Wsz.js",
            "transferSize": 213557,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "hrm.maps.arcgis.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/exm=base,root/ed=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=r78Drb",
            "transferSize": 208636,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/exm=base,root/ed=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=r78Drb",
            "transferSize": 188805,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.swDRIQKcRMs.es5.O/am=AAAABA/d=1/br=1/rs=AGKMywHW5r9buK3p65SVnFeT8xvVIOZ1wA/m=root,base",
            "transferSize": 160580,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.Jn-9HPgVKSU.2021.O/am=AAAABA/d=1/br=1/rs=AGKMywFIPd8H83JB8R7S3Dnm-hTNowb--w/m=root,base",
            "transferSize": 143531,
            "resourceType": "script",
            "mimeType": "text/javascript",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://hrm.maps.arcgis.com/apps/instant/_astro/ProjectionTransformation.BWvbZJEr.js",
            "transferSize": 120257,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "hrm.maps.arcgis.com"
          },
          {
            "url": "https://hrm.maps.arcgis.com/apps/instant/_astro/MultiPathImpl.C4JVKSX3.js",
            "transferSize": 114372,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "hrm.maps.arcgis.com"
          },
          {
            "url": "https://hrm.maps.arcgis.com/apps/instant/_astro/ApplicationBase.Cv5d8iY4.js",
            "transferSize": 82959,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "hrm.maps.arcgis.com"
          },
          {
            "url": "https://www.youtube.com/s/player/8456c9de/www-player.css",
            "transferSize": 59173,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          },
          {
            "url": "https://www.youtube.com/s/_/ytembeds/_/ss/k=ytembeds.base.oRmnRxCtskc.L.W.O/am=AAAABA/d=0/br=1/rs=AGKMywHkqPKx19LNLTFOD88ZyDOWYDGFJw",
            "transferSize": 46861,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "www.youtube.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 14,
            "transferBytes": 2785256
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "resourceType": "stylesheet",
            "count": 2,
            "transferBytes": 106034
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.youtube.com",
            "count": 8,
            "transferBytes": 1738021
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622124
          },
          {
            "domain": "hrm.maps.arcgis.com",
            "count": 4,
            "transferBytes": 531145
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 289631,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 267942,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.youtube.com",
            "urgency": "high",
            "estimatedSavingsBytes": 483692,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.youtube.com/s/player/8456c9de/player_embed.vflset/en_US/base.js",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0,
          "displayValue": "9.6 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 9.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.25,
          "displayValue": "7.6 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 7.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 262 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 262 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 128 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 128 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,730 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,730 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 260 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 260 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 283 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 283 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 5,966 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 5,966 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,392 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,392 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/suburbanplan",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/regional-community-planning/suburban-plan",
      "performanceScore": 0.6,
      "bestPracticesScore": 0.79,
      "transferBytes": 8498482,
      "co2Grams": 3.2556103824348,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 340075,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174936,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2247,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974257651&cv=11&fst=1776974257651&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266400~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning%2Fsuburban-plan&rcb=8&frm=0&tiba=Regional%20%26%20Community%20Planning%20%7C%20Suburban%20Plan%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Regional & Community Planning | Suburban Plan | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "In 2023, Halifax Regional Council launched the suburban planning process for the Suburban Area (lands where central water and sewer services are provided, located beyond Halifax Peninsula and Dartmouth within the Circumferential Highway). While the initial focus was on enabling more housing quickly, this comprehensive planning process is an opportunity to shape the future of our suburban communities for years to come.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/regional-community-planning/suburban-plan",
          "ogTitle": "Suburban Plan",
          "ogDescription": "In 2023, Halifax Regional Council launched the suburban planning process for the Suburban Area (lands where central water and sewer services are provided, located beyond Halifax Peninsula and Dartmouth within the Circumferential Highway). While the initial focus was on enabling more housing quickly, this comprehensive planning process is an opportunity to shape the future of our suburban communities for years to come.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/regional-community-planning/suburban-plan",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 74,
          "tabletSmallTapTargets": 90,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 74,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 90,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 74 small targets on mobile and 90 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:57:57 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 13,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 13
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "13 of 13 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 13,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/13 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 48,
        "urgency": "medium",
        "totalEstimatedSavingsBytes": 4058938.25,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 3258541.25,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "estimatedSavingsBytes": 707551,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 63512,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29334,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 3.11 MB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "high",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 690.97 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 62.02 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 28.65 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 11495148.25,
        "totalEstimatedBlockingMs": 1606,
        "opportunities": [
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 6835698,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 6,675 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 3258541.25,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 3,182 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 707551,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 691 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 287989,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 281 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270331,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1606,
            "displayValue": "Est savings of 1,610 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 63512,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 62 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42192,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 29334,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Right-size images for viewport",
            "urgency": "high",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 6.52 MB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 3.11 MB."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "high",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 690.97 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 281.24 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.00 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1606 ms."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 7749931.241666668
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 7.39 MB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 7.39 MB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 5,
        "urgency": "high",
        "transferBytes": 8498482,
        "css": {
          "unusedBytes": 287989,
          "ratio": 0.0338871106628219,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270331,
          "duplicatedBytes": 0,
          "ratio": 0.03180932783054668,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 287989,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270331,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 17,
        "urgency": "high",
        "transferBytes": 8498482,
        "estimatedDeferrableBytes": 600512,
        "renderBlockingMs": 1606,
        "breakdown": {
          "offscreenImageSavings": 42192,
          "unusedJavascriptSavings": 270331,
          "unusedCssSavings": 287989
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42192,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270331,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 287989,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1606,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 1984940,
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-08/foliage2.jpg",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 831258,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 174936,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2247,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974257651&cv=11&fst=1776974257651&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938466~115938469~117266400~118167059&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning%2Fsuburban-plan&rcb=8&frm=0&tiba=Regional%20%26%20Community%20Planning%20%7C%20Suburban%20Plan%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 21,
        "urgency": "high",
        "transferBytes": 8498482,
        "estimatedRedundantBytes": 558320,
        "redundancyRatio": 0.06569643849336858,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 287989,
            "displayValue": "Est savings of 281 KiB"
          },
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270331,
            "displayValue": "Est savings of 264 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 287989,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270331,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 48,
        "urgency": "high",
        "totalTransferBytes": 8498482,
        "heavyRequestCount": 10,
        "heavyBytes": 7970811,
        "heavyRatio": 0.9379099702746914,
        "heavyRequests": [
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-08/foliage2.jpg",
            "transferSize": 1984940,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-08/clayton-park-townhouses-11_0.jpg",
            "transferSize": 1948206,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-08/fisherman_s-cove-2.jpg",
            "transferSize": 1934785,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-08/windmill-road-wyse-road-to-akerley-37.jpg",
            "transferSize": 1142990,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-12/1_5.png",
            "transferSize": 174315,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/themes/custom/halifax/css/main.css?tdi19c",
            "transferSize": 163451,
            "resourceType": "stylesheet",
            "mimeType": "text/css",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "image",
            "count": 5,
            "transferBytes": 7185236
          },
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622124
          },
          {
            "resourceType": "stylesheet",
            "count": 1,
            "transferBytes": 163451
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "cdn.halifax.ca",
            "count": 6,
            "transferBytes": 7348687
          },
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622124
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42192,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270331,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "high",
            "estimatedSavingsBytes": 1984940,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-08/foliage2.jpg",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.31,
          "displayValue": "4.8 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.8 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 281 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 281 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,610 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,610 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.75,
          "displayValue": "4.3 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.3 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 3,182 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 3,182 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 691 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 691 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "total-byte-weight",
          "title": "Avoid enormous network payloads",
          "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
          "score": 0.5,
          "displayValue": "Total size was 8,299 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "5",
            "categoryName": "Business Strategy And Product Management",
            "id": "25",
            "title": "Define performance and environmental budgets",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets",
            "subheading": "Set budgets, taking people, planet, and performance into account alongside baselines, targets, evidence, and resources to help meet KPIs."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid enormous network payloads\n\n- Lighthouse audit: total-byte-weight\n- Current value: Total size was 8,299 KiB\n- WSG guideline: 25 Define performance and environmental budgets\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#define-performance-and-environmental-budgets\n\n### Why this matters\nLarge network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,600 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,600 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/regional-community-planning/housing-accelerator-fund/second-unit-incentive",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/regional-community-planning/housing-accelerator-fund/second-unit-incentive",
      "performanceScore": 0.52,
      "bestPracticesScore": 0.79,
      "transferBytes": 1199986,
      "co2Grams": 0.45969231686040013,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 74,
            "transferBytes": 175466,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 50,
            "transferBytes": 166533,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2276,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974284529&cv=11&fst=1776974284529&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938469~117266400~117384405~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning%2Fhousing-accelerator-fund%2Fsecond-unit-incentive&rcb=13&frm=0&tiba=Secondary%20suite%20incentive%20grant%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Secondary suite incentive grant | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Apply for up to $13,000 in non-repayable grants to create a secondary unit on your property.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/regional-community-planning/housing-accelerator-fund/second-unit-incentive",
          "ogTitle": "Secondary unit incentive grant",
          "ogDescription": "Apply for up to $13,000 in non-repayable grants to create a secondary unit on your property.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/regional-community-planning/housing-accelerator-fund/second-unit-incentive",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 80,
          "tabletSmallTapTargets": 97,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 80,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 97,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 80 small targets on mobile and 97 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 51,
          "externalScriptsWithoutIntegrity": 51,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:58:17 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "51 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 8,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 8
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "8 of 8 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 8,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/8 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 9,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 109922.04999999999,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 29337,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 30323.049999999996,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25371,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 28.65 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 29.61 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 551402.05,
        "totalEstimatedBlockingMs": 874,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 269866,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 129506,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 126 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42108,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 29337,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 29 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 874,
            "displayValue": "Est savings of 870 ms",
            "urgency": "medium",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 30323.049999999996,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25371,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 263.54 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 126.47 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.12 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 28.65 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "medium",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 874 ms."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 51,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "51 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 509590.4416666666
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 497.65 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 497.65 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1199986,
        "css": {
          "unusedBytes": 129506,
          "ratio": 0.10792292576746729,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 269866,
          "duplicatedBytes": 0,
          "ratio": 0.2248909570611657,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 129506,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 269866,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 19,
        "urgency": "high",
        "transferBytes": 1199986,
        "estimatedDeferrableBytes": 441480,
        "renderBlockingMs": 874,
        "breakdown": {
          "offscreenImageSavings": 42108,
          "unusedJavascriptSavings": 269866,
          "unusedCssSavings": 129506
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42108,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269866,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 129506,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 874,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 58,
        "transferBytes": 822884,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 50,
            "transferBytes": 166533,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2276,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974284529&cv=11&fst=1776974284529&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115616985~115938465~115938469~117266400~117384405~118167060&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning%2Fhousing-accelerator-fund%2Fsecond-unit-incentive&rcb=13&frm=0&tiba=Secondary%20suite%20incentive%20grant%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 38,
        "urgency": "medium",
        "transferBytes": 1199986,
        "estimatedRedundantBytes": 399372,
        "redundancyRatio": 0.332813882828633,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 269866,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 129506,
            "displayValue": "Est savings of 126 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 269866,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 129506,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 30,
        "urgency": "medium",
        "totalTransferBytes": 1199986,
        "heavyRequestCount": 4,
        "heavyBytes": 622124,
        "heavyRatio": 0.5184427151650103,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622124
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622124
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42108,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 269866,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.14,
          "displayValue": "5.9 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 5.9 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 126 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 126 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 870 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 870 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.89,
          "displayValue": "3.5 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 3.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 30 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 30 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,939 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,939 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/parks-recreation/programs-activities/inclusion-support-advisory-group",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/parks-recreation/programs-activities/inclusion-support-advisory-group",
      "performanceScore": 0.7,
      "bestPracticesScore": 0.79,
      "transferBytes": 1157338,
      "co2Grams": 0.4433546613132,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622111,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156073,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 71,
            "transferBytes": 149511,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2265,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974303848&cv=11&fst=1776974303848&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fprograms-activities%2Finclusion-support-advisory-group&rcb=13&frm=0&tiba=Rec%20accessibility%20and%20inclusion%20engagement%20opportunities%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Rec accessibility and inclusion engagement opportunities | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Parks & Recreation is inviting residents to share their input on how recreation programs can be more inclusive and accessible.",
          "robots": "",
          "canonical": "https://www.halifax.ca/parks-recreation/programs-activities/inclusion-support-advisory-group",
          "ogTitle": "Recreation accessibility & inclusion engagement opportunities",
          "ogDescription": "Parks & Recreation is inviting residents to share their input on how recreation programs can be more inclusive and accessible.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/parks-recreation/programs-activities/inclusion-support-advisory-group",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 67,
          "tabletSmallTapTargets": 77,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 67,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 77,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 67 small targets on mobile and 77 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:58:34 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 9,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 9
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "medium",
            "detail": "9 of 9 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 9,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/9 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 11,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 123696.45000000001,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 23651,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "low",
            "estimatedSavingsBytes": 49783.450000000004,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25371,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 23.10 KB."
          },
          {
            "title": "Use modern image compression formats",
            "urgency": "low",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 48.62 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 583774.45,
        "totalEstimatedBlockingMs": 1557,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270711,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1557,
            "displayValue": "Est savings of 1,560 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 104808,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 102 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 42451,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42108,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 23651,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 23 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 49783.450000000004,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 49 KiB",
            "urgency": "low",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25371,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.37 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1557 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 102.35 KB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "medium",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 41.46 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "medium",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 41.12 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 24.31 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 474652.0416666667
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 463.53 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 463.53 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 16,
        "urgency": "high",
        "transferBytes": 1157338,
        "css": {
          "unusedBytes": 104808,
          "ratio": 0.09055954267465512,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270711,
          "duplicatedBytes": 0,
          "ratio": 0.2339083310147943,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 104808,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270711,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 25,
        "urgency": "high",
        "transferBytes": 1157338,
        "estimatedDeferrableBytes": 417627,
        "renderBlockingMs": 1557,
        "breakdown": {
          "offscreenImageSavings": 42108,
          "unusedJavascriptSavings": 270711,
          "unusedCssSavings": 104808
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42108,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270711,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 104808,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1557,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163008,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 812400,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622111,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156073,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11092,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2265,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974303848&cv=11&fst=1776974303848&bg=ffffff&guid=ON&async=1&gtm=45be64m2h2z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401~118167058&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fprograms-activities%2Finclusion-support-advisory-group&rcb=13&frm=0&tiba=Rec%20accessibility%20and%20inclusion%20engagement%20opportunities%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 35,
        "urgency": "medium",
        "transferBytes": 1157338,
        "estimatedRedundantBytes": 375519,
        "redundancyRatio": 0.3244678736894494,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270711,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 104808,
            "displayValue": "Est savings of 102 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270711,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 104808,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 31,
        "urgency": "medium",
        "totalTransferBytes": 1157338,
        "heavyRequestCount": 4,
        "heavyBytes": 622111,
        "heavyRatio": 0.5375361389671816,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163008,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m2h2",
            "transferSize": 162233,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m2h2",
            "transferSize": 160360,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m2h2",
            "transferSize": 136510,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622111
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622111
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42108,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270711,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163008,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 102 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 102 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,560 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,560 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.61,
          "displayValue": "3.6 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 3.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 49 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 49 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,434 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,434 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/parks-recreation/halifax-youth/youth-services-plan",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/parks-recreation/halifax-youth/youth-services-plan",
      "performanceScore": 0.57,
      "bestPracticesScore": 0.75,
      "transferBytes": 1453675,
      "co2Grams": 0.5568758541450001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622162,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 163161,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156076,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11095,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2218,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974322410&cv=11&fst=1776974322410&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fhalifax-youth%2Fyouth-services-plan&rcb=2&frm=0&tiba=Youth%20Services%20Plan%20%7C%20Halifax%20Youth%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Youth Services Plan | Halifax Youth | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "The Youth Services Plan was created by youth to make sure that municipal programs and services are meeting the needs of the youth (aged 13-24), and will provide the basis for service offerings over the next three to five years.",
          "robots": "",
          "canonical": "https://www.halifax.ca/parks-recreation/halifax-youth/youth-services-plan",
          "ogTitle": "Youth Services Plan",
          "ogDescription": "The Youth Services Plan was created by youth to make sure that municipal programs and services are meeting the needs of the youth (aged 13-24), and will provide the basis for service offerings over the next three to five years.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/parks-recreation/halifax-youth/youth-services-plan",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 67,
          "tabletSmallTapTargets": 75,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 67,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 75,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 67 small targets on mobile and 75 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:58:56 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 46,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 15,
          "imagesWithLazy": 1,
          "imagesWithoutLazy": 14
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "14 of 15 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 15,
            "lazyImages": 1,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 1/15 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 25,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 367024.9,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 258885.9,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "estimatedSavingsBytes": 56668,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 26580,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 252.82 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "medium",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 55.34 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 25.96 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 947818.9,
        "totalEstimatedBlockingMs": 1433,
        "opportunities": [
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270736,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 258885.9,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 253 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1433,
            "displayValue": "Est savings of 1,430 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 150326,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 147 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 117585,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 115 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 56668,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 55 KiB",
            "urgency": "medium",
            "sourceAuditId": "uses-optimized-images"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 42147,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 41 KiB",
            "urgency": "medium",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 26580,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 26 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          }
        ],
        "recommendations": [
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.39 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 252.82 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1433 ms."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "medium",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 146.80 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 114.83 KB."
          },
          {
            "title": "Compress oversized image assets",
            "urgency": "medium",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss. Estimated byte savings: 55.34 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 769897.9833333332
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 751.85 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 751.85 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 14,
        "urgency": "high",
        "transferBytes": 1453675,
        "css": {
          "unusedBytes": 117585,
          "ratio": 0.08088809396873442,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270736,
          "duplicatedBytes": 0,
          "ratio": 0.1862424544688462,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 117585,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270736,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 23,
        "urgency": "high",
        "transferBytes": 1453675,
        "estimatedDeferrableBytes": 430468,
        "renderBlockingMs": 1433,
        "breakdown": {
          "offscreenImageSavings": 42147,
          "unusedJavascriptSavings": 270736,
          "unusedCssSavings": 117585
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "medium",
            "estimatedSavingsBytes": 42147,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270736,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 117585,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1433,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 812410,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622162,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 156076,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11095,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2218,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974322410&cv=11&fst=1776974322410&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938469~117266400&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fparks-recreation%2Fhalifax-youth%2Fyouth-services-plan&rcb=2&frm=0&tiba=Youth%20Services%20Plan%20%7C%20Halifax%20Youth%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 32,
        "urgency": "medium",
        "transferBytes": 1453675,
        "estimatedRedundantBytes": 388321,
        "redundancyRatio": 0.2671305484375806,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270736,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 117585,
            "displayValue": "Est savings of 115 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270736,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 117585,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 25,
        "urgency": "medium",
        "totalTransferBytes": 1453675,
        "heavyRequestCount": 4,
        "heavyBytes": 622162,
        "heavyRatio": 0.42799250176277365,
        "heavyRequests": [
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160403,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622162
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622162
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "medium",
            "estimatedSavingsBytes": 42147,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270736,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.47,
          "displayValue": "4.1 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 115 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 115 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,430 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,430 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,140 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,140 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.6,
          "displayValue": "5.2 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 5.2 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 264 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 253 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 253 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 55 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 55 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 41 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 41 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,287 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,287 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/about-halifax/regional-community-planning/helping-address-homelessness?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Addressing_Homelessness",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/about-halifax/regional-community-planning/helping-address-homelessness?utm_source=Halifax.ca&amp;utm_medium=Popular_links&amp;utm_campaign=Addressing_Homelessness",
      "performanceScore": 0.66,
      "bestPracticesScore": 0.79,
      "transferBytes": 1567584,
      "co2Grams": 0.6005122733375999,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157381,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 72,
            "transferBytes": 148336,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11099,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2284,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974344647&cv=11&fst=1776974344647&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401~117384405&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning%2Fhelping-address-homelessness%3Futm_source%3DHalifax.ca%26amp%3Butm_medium%3DPopular_links%26amp%3Butm_campaign%3DAddressing_Homelessness&rcb=15&frm=0&tiba=Helping%20address%20homelessness%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 1,
        "uniqueElementsAssessed": 1,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Helping address homelessness | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Helping address homelessness. Common questions regarding homelessness and homeless encampments.",
          "robots": "",
          "canonical": "https://www.halifax.ca/about-halifax/regional-community-planning/helping-address-homelessness",
          "ogTitle": "Helping address homelessness",
          "ogDescription": "Helping address homelessness. Common questions regarding homelessness and homeless encampments.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/about-halifax/regional-community-planning/helping-address-homelessness",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 89,
          "tabletSmallTapTargets": 102,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 89,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 102,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 89 small targets on mobile and 102 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 48,
          "externalScriptsWithoutIntegrity": 48,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:59:17 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "48 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 12,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 12
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "12 of 12 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 12,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/12 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 22,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 340204.8,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 266493.8,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 24891,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 23449,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 25371,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 260.25 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 24.31 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 22.90 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 24.78 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1355309.8,
        "totalEstimatedBlockingMs": 1453,
        "opportunities": [
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 478229,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 467 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270937,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 265 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 266493.8,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 260 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "uses-responsive-images",
            "title": "Right-size images for viewport",
            "detail": "Avoid sending larger images than the rendered size needs.",
            "estimatedSavingsBytes": 162158,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 158 KiB",
            "urgency": "high",
            "sourceAuditId": "uses-responsive-images"
          },
          {
            "id": "render-blocking-resources",
            "title": "Eliminate render-blocking resources",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering.",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1453,
            "displayValue": "Est savings of 1,450 ms",
            "urgency": "high",
            "sourceAuditId": "render-blocking-resources"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 103781,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 101 KiB",
            "urgency": "medium",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 24891,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 24 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 23449,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 23 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 25371,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 25 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 467.02 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.59 KB."
          },
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 260.25 KB."
          },
          {
            "title": "Right-size images for viewport",
            "urgency": "high",
            "detail": "Avoid sending larger images than the rendered size needs. Estimated byte savings: 158.36 KB."
          },
          {
            "title": "Eliminate render-blocking resources",
            "urgency": "high",
            "detail": "Inline critical assets and defer non-critical scripts/styles for faster rendering. Estimated render unblocking: 1453 ms."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "medium",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 101.35 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 48,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "48 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 879671.4916666665
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 859.05 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 859.05 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 13,
        "urgency": "high",
        "transferBytes": 1567584,
        "css": {
          "unusedBytes": 103781,
          "ratio": 0.06620442668463061,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270937,
          "duplicatedBytes": 0,
          "ratio": 0.17283730887786555,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 103781,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270937,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 32,
        "urgency": "high",
        "transferBytes": 1567584,
        "estimatedDeferrableBytes": 852947,
        "renderBlockingMs": 1453,
        "breakdown": {
          "offscreenImageSavings": 478229,
          "unusedJavascriptSavings": 270937,
          "unusedCssSavings": 103781
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 478229,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270937,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 103781,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Eliminate render-blocking resources",
            "area": "render-path",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "estimatedBlockingMs": 1453,
            "strategy": "Defer scripts/styles not required for first paint and preload only truly critical assets.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from cdn.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 188641,
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-11/encampment_sites_overview_nov3-2025.jpg",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 55,
        "transferBytes": 813747,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622124,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 47,
            "transferBytes": 157381,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11099,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2284,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974344647&cv=11&fst=1776974344647&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938466~115938468~117266401~117384405&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fabout-halifax%2Fregional-community-planning%2Fhelping-address-homelessness%3Futm_source%3DHalifax.ca%26amp%3Butm_medium%3DPopular_links%26amp%3Butm_campaign%3DAddressing_Homelessness&rcb=15&frm=0&tiba=Helping%20address%20homelessness%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 33,
        "urgency": "medium",
        "transferBytes": 1567584,
        "estimatedRedundantBytes": 374718,
        "redundancyRatio": 0.23904173556249617,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270937,
            "displayValue": "Est savings of 265 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 103781,
            "displayValue": "Est savings of 101 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270937,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "medium",
            "estimatedSavingsBytes": 103781,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 43,
        "urgency": "high",
        "totalTransferBytes": 1567584,
        "heavyRequestCount": 6,
        "heavyBytes": 1058520,
        "heavyRatio": 0.6752556800783881,
        "heavyRequests": [
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-11/encampment_sites_overview_nov3-2025.jpg",
            "transferSize": 188641,
            "resourceType": "image",
            "mimeType": "image/jpeg",
            "domain": "cdn.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162249,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160365,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136498,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622124
          },
          {
            "resourceType": "image",
            "count": 2,
            "transferBytes": 436396
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622124
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          },
          {
            "domain": "cdn.halifax.ca",
            "count": 1,
            "transferBytes": 188641
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 478229,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270937,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Defer non-critical UI modules until after first render",
            "urgency": "high",
            "estimatedSavingsBytes": 0,
            "strategy": "Keep only above-the-fold resources in the initial path; hydrate or import secondary modules later.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from cdn.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 188641,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://cdn.halifax.ca/sites/default/files/pages/in-content/2025-11/encampment_sites_overview_nov3-2025.jpg",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.38,
          "displayValue": "4.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 4.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 101 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 101 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0,
          "displayValue": "Est savings of 1,450 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 1,450 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "server-response-time",
          "title": "Reduce initial server response time",
          "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
          "score": 0,
          "displayValue": "Root document took 1,280 ms",
          "impact": "high",
          "wsg": {
            "categoryId": "4",
            "categoryName": "Hosting, Infrastructure, and Systems",
            "id": "11",
            "title": "Ensure infrastructure fits project requirements",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements",
            "subheading": "Maintain the infrastructure you require rather than over-provisioning. Autoscale to meet demand and preserve hardware resources."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce initial server response time\n\n- Lighthouse audit: server-response-time\n- Current value: Root document took 1,280 ms\n- WSG guideline: 11 Ensure infrastructure fits project requirements\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#ensure-infrastructure-fits-project-requirements\n\n### Why this matters\nKeep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.71,
          "displayValue": "4.6 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.6 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0.5,
          "displayValue": "Est savings of 265 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 265 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 260 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 260 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 25 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 25 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 467 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 467 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,660 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,660 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    },
    {
      "url": "https://www.halifax.ca/home/news",
      "status": "ok",
      "finalUrl": "https://www.halifax.ca/home/news",
      "performanceScore": 0.65,
      "bestPracticesScore": 0.79,
      "transferBytes": 1494024,
      "co2Grams": 0.5723328055536001,
      "greenWeb": {
        "page": {
          "hostname": "www.halifax.ca",
          "checked": true,
          "status": "not-green",
          "green": false,
          "hostedBy": null,
          "hostedByWebsite": null,
          "listedProvider": null,
          "partner": null,
          "modified": "2026-04-23T19:23:40.421518",
          "supportingDocuments": [],
          "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.halifax.ca",
          "error": null
        },
        "externalAssets": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622111,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 67,
            "transferBytes": 197727,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "stylesheet",
            "requestCount": 77,
            "transferBytes": 191457,
            "sampleUrl": "https://cdn.halifax.ca/core/assets/vendor/jquery.ui/themes/base/core.css?tdi19c",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11103,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2184,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974364436&cv=11&fst=1776974364436&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome%2Fnews&rcb=16&frm=0&tiba=Halifax%20News%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "summary": {
          "pageStatus": "not-green",
          "externalOriginCount": 6,
          "greenCount": 4,
          "notGreenCount": 3,
          "unknownCount": 0
        }
      },
      "formValidation": {
        "score": 30,
        "urgency": "medium",
        "pageElementOccurrences": 5,
        "uniqueElementsAssessed": 5,
        "reusedFromCacheCount": 1,
        "components": [
          {
            "signature": "search|get|/search/content|input|search|keys|off|optional|no-pattern|no-minlength",
            "role": "search",
            "controlType": "search",
            "fieldName": "keys",
            "formContext": "search|get|/search/content",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": true
          },
          {
            "signature": "form|get|/home/news|select|select|category|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "select",
            "fieldName": "category",
            "formContext": "form|get|/home/news",
            "hasLabel": true,
            "hasValidationRule": false,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 50,
              "urgency": "medium",
              "issues": [
                "No explicit validation rule",
                "No error messaging hook"
              ],
              "recommendations": [
                "Define validation constraints (required, pattern, min/max, or semantic input type).",
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|get|/home/news|input|text|keyword|no-autocomplete|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "text",
            "fieldName": "keyword",
            "formContext": "form|get|/home/news",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": false,
            "assessment": {
              "score": 30,
              "urgency": "medium",
              "issues": [
                "No error messaging hook",
                "Missing autocomplete for tooling support"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input.",
                "Provide meaningful autocomplete values to support browsers and assistive tooling."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|get|/home/news|input|date|start|off|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "date",
            "fieldName": "start",
            "formContext": "form|get|/home/news",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 20,
              "urgency": "low",
              "issues": [
                "No error messaging hook"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": false
          },
          {
            "signature": "form|get|/home/news|input|date|end|off|optional|no-pattern|no-minlength",
            "role": "form",
            "controlType": "date",
            "fieldName": "end",
            "formContext": "form|get|/home/news",
            "hasLabel": true,
            "hasValidationRule": true,
            "hasErrorMessagingHook": false,
            "toolingFriendly": true,
            "assessment": {
              "score": 20,
              "urgency": "low",
              "issues": [
                "No error messaging hook"
              ],
              "recommendations": [
                "Add aria-errormessage/aria-describedby and a visible error region for invalid input."
              ]
            },
            "reusedFromCache": false
          }
        ],
        "recommendations": [
          {
            "title": "No error messaging hook",
            "urgency": "medium",
            "detail": "5 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "Missing autocomplete for tooling support",
            "urgency": "medium",
            "detail": "2 unique form control signature(s) on this page include this issue."
          },
          {
            "title": "No explicit validation rule",
            "urgency": "medium",
            "detail": "1 unique form control signature(s) on this page include this issue."
          }
        ]
      },
      "metadata": {
        "score": 0,
        "urgency": "low",
        "checks": {
          "hasTitle": true,
          "hasLang": true,
          "hasDescription": true,
          "hasCanonical": true,
          "hasOpenGraphCore": true,
          "hasTwitterCard": true,
          "hasViewport": true,
          "hasCharset": true,
          "hasValidStructuredData": true,
          "hasInvalidStructuredData": false
        },
        "observed": {
          "title": "Halifax News | Halifax",
          "lang": "en",
          "charset": "utf-8",
          "viewport": "width=device-width, initial-scale=1, shrink-to-fit=no",
          "description": "Halifax News - Municipal public service announcements and media releases.",
          "robots": "",
          "canonical": "https://www.halifax.ca/home/news",
          "ogTitle": "News",
          "ogDescription": "Halifax News - Municipal public service announcements and media releases.",
          "ogType": "article",
          "ogUrl": "https://www.halifax.ca/home/news",
          "twitterCard": "summary_large_image",
          "ldJsonCount": 0,
          "validLdJsonCount": 0,
          "invalidLdJsonCount": 0
        },
        "recommendations": [
          {
            "title": "Metadata structure looks healthy",
            "urgency": "low",
            "detail": "Core machine-readable metadata is present and no structural issues were detected."
          }
        ]
      },
      "layoutAdaptation": {
        "score": 30,
        "urgency": "medium",
        "checks": {
          "testedMobile": true,
          "testedTablet": true,
          "horizontalOverflowOnMobile": false,
          "horizontalOverflowOnTablet": false,
          "mobileSmallTapTargets": 78,
          "tabletSmallTapTargets": 91,
          "fixedWidthOffenders": 0,
          "oversizedMedia": 0,
          "gridContainersDetected": 1,
          "mobileGridOverflowContainers": 0,
          "tabletGridOverflowContainers": 0,
          "gridOverflowContainers": 0,
          "scanErrors": 0
        },
        "perDevice": [
          {
            "device": "mobile",
            "viewportWidth": 390,
            "viewportHeight": 844,
            "contentWidth": 390,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 78,
            "oversizedMedia": 0,
            "gridContainersDetected": 0,
            "gridOverflowContainers": 0
          },
          {
            "device": "tablet",
            "viewportWidth": 820,
            "viewportHeight": 1180,
            "contentWidth": 820,
            "horizontalOverflowPx": 0,
            "hasHorizontalOverflow": false,
            "fixedWidthOffenders": 0,
            "smallTapTargets": 91,
            "oversizedMedia": 0,
            "gridContainersDetected": 1,
            "gridOverflowContainers": 0
          }
        ],
        "recommendations": [
          {
            "title": "Increase touch target sizes",
            "urgency": "high",
            "detail": "Ensure interactive controls are at least 44x44 CSS px. Detected 78 small targets on mobile and 91 on tablet."
          }
        ]
      },
      "securityLight": {
        "score": 59,
        "urgency": "medium",
        "checks": {
          "isHttps": true,
          "hasHsts": false,
          "hasCsp": false,
          "hasXContentTypeOptions": true,
          "hasReferrerPolicy": false,
          "hasPermissionsPolicy": false,
          "exposesServerFingerprint": true,
          "externalScriptCount": 72,
          "externalScriptsWithoutIntegrity": 72,
          "vulnerableLibraryCount": 0
        },
        "observed": {
          "headers": {
            "cache-control": "must-revalidate, no-cache, private",
            "connection": "keep-alive",
            "content-encoding": "gzip",
            "content-language": "en",
            "content-type": "text/html; charset=UTF-8",
            "date": "Thu, 23 Apr 2026 19:59:37 GMT",
            "expires": "Sun, 19 Nov 1978 05:00:00 GMT",
            "link": "<//cdn.halifax.ca>; rel=preconnect; crossorigin",
            "server": "Apache",
            "transfer-encoding": "chunked",
            "vary": "Accept-Encoding",
            "x-commerce-core": "3",
            "x-content-type-options": "nosniff",
            "x-drupal-cache": "UNCACHEABLE (response policy)",
            "x-drupal-dynamic-cache": "HIT",
            "x-frame-options": "SAMEORIGIN"
          },
          "vulnerableLibrariesAuditScore": null,
          "vulnerableLibraries": []
        },
        "recommendations": [
          {
            "title": "Add a Content-Security-Policy header",
            "urgency": "high",
            "detail": "Add an appropriate CSP to reduce script injection and resource loading risk."
          },
          {
            "title": "Enable Strict-Transport-Security",
            "urgency": "medium",
            "detail": "Set a Strict-Transport-Security header to enforce HTTPS on repeat visits."
          },
          {
            "title": "Define a Referrer-Policy",
            "urgency": "low",
            "detail": "Set a referrer policy to reduce unnecessary URL data leakage."
          },
          {
            "title": "Define a Permissions-Policy",
            "urgency": "low",
            "detail": "Restrict browser capabilities to only what the application needs."
          },
          {
            "title": "Add SRI to external scripts",
            "urgency": "medium",
            "detail": "72 external script tag(s) are missing integrity attributes."
          }
        ]
      },
      "expectedFiles": {
        "score": 50,
        "urgency": "medium",
        "origin": "https://www.halifax.ca",
        "checks": [
          {
            "path": "/robots.txt",
            "kind": "expected",
            "url": "https://www.halifax.ca/robots.txt",
            "found": true,
            "status": 200,
            "contentType": "text/plain; charset=UTF-8"
          },
          {
            "path": "/sitemap.xml",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/sitemap.xml",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/.well-known/security.txt",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/.well-known/security.txt",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/manifest.webmanifest",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/manifest.webmanifest",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=UTF-8"
          },
          {
            "path": "/favicon.ico",
            "kind": "beneficial",
            "url": "https://www.halifax.ca/favicon.ico",
            "found": false,
            "status": 404,
            "contentType": "text/html; charset=iso-8859-1"
          }
        ],
        "recommendations": [
          {
            "title": "Add beneficial discoverability and maintenance files",
            "urgency": "medium",
            "detail": "Missing beneficial file(s): /sitemap.xml, /.well-known/security.txt, /manifest.webmanifest, /favicon.ico."
          }
        ]
      },
      "mediaHints": {
        "score": 50,
        "urgency": "medium",
        "checks": {
          "hasDarkMode": false,
          "hasMetaColorScheme": false,
          "hasDarkModeQuery": false,
          "autoplayingMedia": [],
          "autoplayCount": 0,
          "unmutedAutoplayCount": 0,
          "totalImages": 11,
          "imagesWithLazy": 0,
          "imagesWithoutLazy": 11
        },
        "recommendations": [
          {
            "title": "Add dark mode support",
            "urgency": "medium",
            "detail": "No prefers-color-scheme: dark media query or color-scheme meta tag was found. Dark mode reduces energy use on OLED screens and improves user choice."
          },
          {
            "title": "Add loading=\"lazy\" to images",
            "urgency": "high",
            "detail": "11 of 11 image(s) lack an explicit loading=\"lazy\" attribute. Lazy loading defers below-fold images and reduces initial page weight."
          }
        ]
      },
      "wsgCustom": {
        "score": 60,
        "urgency": "high",
        "data": {
          "hasPrintStyles": true,
          "hasReducedMotion": false,
          "media": {
            "totalImages": 11,
            "lazyImages": 0,
            "totalIframes": 0,
            "lazyIframes": 0
          },
          "typography": {
            "primaryFont": "\"Alright Sans\", Arial, sans-serif",
            "usesSystemFont": true
          },
          "tracking": {
            "count": 5,
            "scripts": [
              "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
              "https://www.google-analytics.com/analytics.js",
              "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
              "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7"
            ]
          },
          "semantics": {
            "hasNavigation": true,
            "hasMainContent": true
          }
        },
        "recommendations": [
          {
            "guideline": "12.3",
            "title": "No reduced motion support",
            "urgency": "low",
            "detail": "Implement prefers-reduced-motion to allow users to disable animations, reducing compute and improving accessibility.",
            "wsid": "12.control animation",
            "assessor": "script",
            "example": "@media (prefers-reduced-motion: reduce) {\n  *, ::before, ::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n}"
          },
          {
            "guideline": "11.3",
            "title": "Incomplete media lazy loading",
            "urgency": "medium",
            "detail": "Only 0/11 images use loading=\"lazy\". Global lazy loading reduces initial data transfer and energy consumption.",
            "wsid": "11.lazy loading",
            "assessor": "script",
            "example": "<img src=\"image.webp\" alt=\"Description\" loading=\"lazy\" width=\"800\" height=\"600\">\n<!-- Works for iframes too -->\n<iframe src=\"video.html\" loading=\"lazy\"></iframe>"
          },
          {
            "guideline": "7.3",
            "title": "Multiple tracking scripts detected",
            "urgency": "medium",
            "detail": "Found 5 commercial tracking scripts. Consider lightweight, privacy-focused alternatives like Plausible or Fathom to reduce JS weight and energy footprint.",
            "wsid": "7.analytics and tracking",
            "assessor": "script",
            "example": "<!-- Replace heavy trackers with lightweight alternatives -->\n<script defer data-domain=\"yourdomain.com\" src=\"https://plausible.io/js/script.js\"></script>"
          },
          {
            "guideline": "2.4",
            "title": "Review User Journey Efficiency",
            "urgency": "investigate",
            "detail": "Have a human walk through the main user journeys and verify they require the fewest steps possible. Unnecessary steps waste user time and device energy. Look for redundant confirmations, forced account creation, and non-essential interstitials.",
            "wsid": "2.minimize non-essential content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#minimize-non-essential-content-interactivity-or-journeys",
            "assessor": "human"
          },
          {
            "guideline": "2.6",
            "title": "Check for Engagement Traps",
            "urgency": "investigate",
            "detail": "Manually review the page for patterns that artificially prolong engagement: infinite scroll, autoplay carousels, sticky overlays, and notification permission prompts. These waste user attention and device energy.",
            "wsid": "2.design to assist not distract",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#design-to-assist-and-not-to-distract",
            "assessor": "human"
          },
          {
            "guideline": "2.7",
            "title": "Audit for Deceptive Design Patterns",
            "urgency": "investigate",
            "detail": "Have a human identify dark patterns: misleading consent dialogs, hidden unsubscribe links, forced continuity, and bait-and-switch flows. Deceptive patterns waste user time and undermine trust.",
            "wsid": "2.avoid manipulative deceptive",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#avoid-being-manipulative-or-deceptive",
            "assessor": "human"
          },
          {
            "guideline": "2.14",
            "title": "Verify Accessible Alternatives for All Media",
            "urgency": "investigate",
            "detail": "Manually check that every video has captions, every audio file has a transcript, every image has meaningful alt text, and every PDF has an accessible HTML alternative. Alternatives let assistive technology users avoid re-downloading heavy formats.",
            "wsid": "2.offer suitable alternatives",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#offer-suitable-alternatives-for-every-format-used",
            "assessor": "human"
          },
          {
            "guideline": "2.18",
            "title": "Confirm User Research Was Conducted",
            "urgency": "investigate",
            "detail": "Verify that genuine user research or usability testing has informed the design. Research-driven design reduces wasted iterations, removes unnecessary features, and ensures the product meets real needs efficiently.",
            "wsid": "2.involve users early",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#involve-users-early-in-the-project",
            "assessor": "human"
          },
          {
            "guideline": "2.10",
            "title": "Review Content Conciseness",
            "urgency": "investigate",
            "detail": "Use a Large Language Model (e.g. locally or via API) to evaluate page text for conciseness and clarity. Removing superfluous text reduces payload, reading time, and inference energy for search engines indexing this content.",
            "wsid": "2.provide clear inclusive content",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#provide-clear-inclusive-content-with-purpose",
            "assessor": "ai"
          },
          {
            "guideline": "4.4",
            "title": "Verify Error Pages and Redirects Are Configured",
            "urgency": "investigate",
            "detail": "Have a human check that custom 404 and 500 error pages exist and that there are no redirect chains longer than one hop. Broken links force wasted round-trips. Redirect chains multiply transfer costs.",
            "wsid": "4.error pages redirection",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#setup-necessary-error-pages-and-redirection-links",
            "assessor": "human"
          },
          {
            "guideline": "4.10",
            "title": "Review CDN Usage and Geographic Distribution",
            "urgency": "investigate",
            "detail": "Confirm that static assets are served from a CDN and that the CDN edge nodes are geographically close to the primary audience. CDN misuse—or absence—increases last-mile transfer distance and the associated energy cost of data delivery.",
            "wsid": "4.content delivery networks",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#use-content-delivery-networks-cdns-appropriately",
            "assessor": "human"
          },
          {
            "guideline": "5.2",
            "title": "Confirm a Sustainability Advocate Is Assigned",
            "urgency": "investigate",
            "detail": "Verify that someone on the team has explicit responsibility for web sustainability. Without a designated advocate, sustainability improvements tend to be deprioritized and never reach the backlog.",
            "wsid": "5.assign sustainability advocate",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#assign-a-sustainability-advocate",
            "assessor": "human"
          },
          {
            "guideline": "5.8",
            "title": "Check for a Public Sustainability Statement",
            "urgency": "investigate",
            "detail": "Look for a publicly accessible sustainability statement, disclosure page, or environmental policy. Mandatory disclosure requirements are growing globally and transparency builds user trust. The statement should include measurable targets and dates.",
            "wsid": "5.support mandatory disclosures",
            "wsgUrl": "https://www.w3.org/TR/web-sustainability-guidelines/#support-mandatory-disclosures-and-reporting",
            "assessor": "human"
          }
        ]
      },
      "gridAware": {
        "detected": false,
        "signals": {
          "hasGridAwareAttr": false,
          "gridAwareValue": null,
          "hasInfoBar": false,
          "scriptSignals": [],
          "headerSignals": [],
          "electricityMapsRequests": 0
        },
        "recommendations": [
          {
            "title": "Consider implementing grid-aware website adaptation",
            "urgency": "investigate",
            "detail": "Grid-aware websites serve lighter experiences when the local grid runs on carbon-intensive energy. The Green Web Foundation provides a JS library and edge-function plugins (Cloudflare Workers, Netlify Edge) to implement this with minimal code.",
            "wsgUrl": "https://www.thegreenwebfoundation.org/tools/grid-aware-websites/",
            "assessor": "human"
          }
        ]
      },
      "compressionOpportunities": {
        "wsgReference": {
          "title": "Reduce data transfer with compression",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#reduce-data-transfer-with-compression"
        },
        "score": 27,
        "urgency": "low",
        "totalEstimatedSavingsBytes": 397436.45,
        "checks": {
          "hasEffectiveTextCompression": true
        },
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Use modern image compression formats",
            "urgency": "high",
            "estimatedSavingsBytes": 296661.45,
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size."
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 32291,
            "detail": "Minification amplifies compression efficiency and reduces payload size."
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "estimatedSavingsBytes": 31057,
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes."
          },
          {
            "id": "uses-optimized-images",
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "estimatedSavingsBytes": 37427,
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings."
          }
        ],
        "recommendations": [
          {
            "title": "Use modern image compression formats",
            "urgency": "high",
            "detail": "Prefer AVIF/WebP over legacy formats where possible to reduce transfer size. Estimated savings: 289.71 KB."
          },
          {
            "title": "Minify CSS before transfer",
            "urgency": "medium",
            "detail": "Minification amplifies compression efficiency and reduces payload size. Estimated savings: 31.53 KB."
          },
          {
            "title": "Minify JavaScript before transfer",
            "urgency": "medium",
            "detail": "Minify JS bundles so transport compression produces better results with fewer bytes. Estimated savings: 30.33 KB."
          },
          {
            "title": "Improve image encoding quality/size",
            "urgency": "low",
            "detail": "Re-encode oversized images and tune compression quality for significant byte savings. Estimated savings: 36.55 KB."
          }
        ]
      },
      "optimizationOpportunities": {
        "wsgReference": {
          "title": "Use the most efficient solution for your service",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service"
        },
        "score": 100,
        "urgency": "high",
        "totalEstimatedSavingsBytes": 1099979.45,
        "totalEstimatedBlockingMs": 0,
        "opportunities": [
          {
            "id": "modern-image-formats",
            "title": "Serve images in next-gen formats",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP.",
            "estimatedSavingsBytes": 296661.45,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 290 KiB",
            "urgency": "high",
            "sourceAuditId": "modern-image-formats"
          },
          {
            "id": "offscreen-images",
            "title": "Lazy-load offscreen images",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed.",
            "estimatedSavingsBytes": 289588,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 283 KiB",
            "urgency": "high",
            "sourceAuditId": "offscreen-images"
          },
          {
            "id": "unused-javascript",
            "title": "Remove unused JavaScript",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code.",
            "estimatedSavingsBytes": 270406,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 264 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-javascript"
          },
          {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped.",
            "estimatedSavingsBytes": 142549,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 139 KiB",
            "urgency": "high",
            "sourceAuditId": "unused-css-rules"
          },
          {
            "id": "unminified-css",
            "title": "Minify CSS",
            "detail": "Use minified production CSS output to reduce bytes in transit.",
            "estimatedSavingsBytes": 32291,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 32 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-css"
          },
          {
            "id": "unminified-javascript",
            "title": "Minify JavaScript",
            "detail": "Use minified production JS output to reduce payload size.",
            "estimatedSavingsBytes": 31057,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 30 KiB",
            "urgency": "medium",
            "sourceAuditId": "unminified-javascript"
          },
          {
            "id": "uses-optimized-images",
            "title": "Compress oversized image assets",
            "detail": "Re-encode large images to reduce transfer weight without visible quality loss.",
            "estimatedSavingsBytes": 37427,
            "estimatedBlockingMs": 0,
            "displayValue": "Est savings of 37 KiB",
            "urgency": "low",
            "sourceAuditId": "uses-optimized-images"
          }
        ],
        "recommendations": [
          {
            "title": "Serve images in next-gen formats",
            "urgency": "high",
            "detail": "Convert high-byte images to more efficient formats such as AVIF or WebP. Estimated byte savings: 289.71 KB."
          },
          {
            "title": "Lazy-load offscreen images",
            "urgency": "high",
            "detail": "Defer below-the-fold imagery until it is likely to be viewed. Estimated byte savings: 282.80 KB."
          },
          {
            "title": "Remove unused JavaScript",
            "urgency": "high",
            "detail": "Reduce dead JS and split bundles to avoid shipping non-critical code. Estimated byte savings: 264.07 KB."
          },
          {
            "title": "Remove unused CSS",
            "urgency": "high",
            "detail": "Trim unused selectors and split CSS so only needed styles are shipped. Estimated byte savings: 139.21 KB."
          },
          {
            "title": "Minify CSS",
            "urgency": "medium",
            "detail": "Use minified production CSS output to reduce bytes in transit. Estimated byte savings: 31.53 KB."
          },
          {
            "title": "Minify JavaScript",
            "urgency": "medium",
            "detail": "Use minified production JS output to reduce payload size. Estimated byte savings: 30.33 KB."
          }
        ]
      },
      "dependencyMaintenance": {
        "wsgReference": {
          "title": "Use dependencies appropriately and ensure maintenance",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance"
        },
        "score": 10,
        "urgency": "medium",
        "vulnerableLibraryCount": 0,
        "vulnerableLibraries": [],
        "externalScriptsWithoutIntegrity": 72,
        "recommendations": [
          {
            "title": "Add integrity attributes for external dependencies",
            "urgency": "medium",
            "detail": "72 external script dependency URL(s) are missing SRI integrity attributes."
          }
        ]
      },
      "offlineSupport": {
        "wsgReference": {
          "title": "Optimize caching and support offline access",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-caching-and-support-offline-access"
        },
        "score": 100,
        "urgency": "high",
        "checks": {
          "hasServiceWorker": false,
          "worksOffline": false,
          "hasInstallableManifest": false,
          "hasOfflineStartUrl": false,
          "longCacheTtlScore": 0.5,
          "cacheSavingsBytes": 811218.7249999997
        },
        "opportunities": [
          {
            "id": "service-worker",
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "id": "works-offline",
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "id": "installable-manifest",
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "id": "offline-start-url",
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "id": "uses-long-cache-ttl",
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 792.21 KB)."
          }
        ],
        "recommendations": [
          {
            "title": "Add service worker support",
            "urgency": "high",
            "detail": "Register a service worker to support resilient caching and offline behavior for key routes."
          },
          {
            "title": "Ensure critical routes work offline",
            "urgency": "high",
            "detail": "Provide an offline fallback strategy for key pages and shell assets."
          },
          {
            "title": "Improve web app manifest support",
            "urgency": "medium",
            "detail": "Complete manifest fields so clients can install and run an app-like experience."
          },
          {
            "title": "Support offline start URL behavior",
            "urgency": "medium",
            "detail": "Ensure start URL and shell routing can load in disconnected conditions."
          },
          {
            "title": "Strengthen static asset cache TTL",
            "urgency": "medium",
            "detail": "Improve long-lived cache headers for immutable static assets (estimated savings opportunity: 792.21 KB)."
          }
        ]
      },
      "languageVersionGuidance": {
        "wsgReference": {
          "title": "Use the latest stable language version",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-latest-stable-language-version"
        },
        "score": 0,
        "urgency": "low",
        "observedTechnologies": [],
        "outdatedTechnologies": [],
        "vulnerableLibraryCount": 0,
        "recommendations": [
          {
            "title": "No obvious outdated runtime version disclosed",
            "urgency": "low",
            "detail": "No clearly outdated runtime version signals were exposed in sampled HTTP headers. Verify language/runtime versions in source and CI since backend versions are not always externally visible."
          }
        ]
      },
      "deadCode": {
        "score": 14,
        "urgency": "high",
        "transferBytes": 1494024,
        "css": {
          "unusedBytes": 142549,
          "ratio": 0.09541279122691469,
          "auditId": "unused-css-rules"
        },
        "javascript": {
          "unusedBytes": 270406,
          "duplicatedBytes": 0,
          "ratio": 0.18099173774986213,
          "auditIds": [
            "unused-javascript",
            "duplicated-javascript"
          ]
        },
        "html": {
          "estimatedPenalty": 0.125,
          "totalBodyElements": 0,
          "maxDepth": 0,
          "maxChildElements": 0,
          "note": "HTML dead code cannot be measured directly from Lighthouse. This score estimates unnecessary markup from DOM size and complexity signals."
        },
        "recommendations": [
          {
            "area": "css",
            "title": "Remove unused CSS selectors and component styles",
            "urgency": "high",
            "estimatedSavingsBytes": 142549,
            "strategy": "Trim styles that never match rendered markup and split component CSS so only used styles are shipped.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          },
          {
            "area": "javascript",
            "title": "Remove unused JavaScript and feature bundles",
            "urgency": "high",
            "estimatedSavingsBytes": 270406,
            "strategy": "Drop unused packages and feature code, or move them behind route-level or interaction-triggered imports.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "4",
              "title": "Remove unnecessary code",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
              "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "4",
          "title": "Remove unnecessary code",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-code",
          "subheading": "Clear out dead or unused code as it builds up in a project to reduce the amount of wasted data being transferred."
        }
      },
      "nonCriticalResources": {
        "score": 14,
        "urgency": "high",
        "transferBytes": 1494024,
        "estimatedDeferrableBytes": 702543,
        "renderBlockingMs": 0,
        "breakdown": {
          "offscreenImageSavings": 289588,
          "unusedJavascriptSavings": 270406,
          "unusedCssSavings": 142549
        },
        "candidates": [
          {
            "title": "Lazy-load offscreen images",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 289588,
            "strategy": "Load below-the-fold images only when they approach the viewport.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Defer non-critical JavaScript",
            "area": "javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270406,
            "strategy": "Split bundles and load feature code on interaction or route transition.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Inline critical CSS and defer remainder",
            "area": "stylesheet",
            "urgency": "high",
            "estimatedSavingsBytes": 142549,
            "strategy": "Ship only above-the-fold CSS in initial render path and defer non-critical styles.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy image from www.halifax.ca",
            "area": "image",
            "urgency": "high",
            "estimatedSavingsBytes": 247755,
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          },
          {
            "title": "Evaluate deferred loading for heavy script from www.googletagmanager.com",
            "area": "script",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "strategy": "Confirm this asset is required for first paint; defer or lazy-load if not critical.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "8",
              "title": "Defer the loading of non-critical resources",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
              "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "8",
          "title": "Defer the loading of non-critical resources",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#defer-the-loading-of-non-critical-resources",
          "subheading": "Avoid render-blocking slowdowns by asynchronously loading, deferring, or prioritizing external resources as appropriate."
        }
      },
      "thirdPartyJs": {
        "wsgReference": {
          "title": "Give third parties the same priority as first parties during assessment",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#give-third-parties-the-same-priority-as-first-parties-during-assessment"
        },
        "score": 75,
        "urgency": "high",
        "providerCount": 5,
        "requestCount": 75,
        "transferBytes": 853984,
        "notGreenCount": 1,
        "unknownCount": 0,
        "scripts": [
          {
            "hostname": "www.googletagmanager.com",
            "resourceType": "script",
            "requestCount": 4,
            "transferBytes": 622111,
            "sampleUrl": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "greenCheck": {
              "hostname": "www.googletagmanager.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-03-06T00:36:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.googletagmanager.com",
              "error": null
            }
          },
          {
            "hostname": "cdn.halifax.ca",
            "resourceType": "script",
            "requestCount": 67,
            "transferBytes": 197727,
            "sampleUrl": "https://cdn.halifax.ca/core/misc/drupalSettingsLoader.js?v=10.5.6",
            "greenCheck": {
              "hostname": "cdn.halifax.ca",
              "checked": true,
              "status": "not-green",
              "green": false,
              "hostedBy": null,
              "hostedByWebsite": null,
              "listedProvider": null,
              "partner": null,
              "modified": "2026-04-23T19:23:40.416017",
              "supportingDocuments": [],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/cdn.halifax.ca",
              "error": null
            }
          },
          {
            "hostname": "www.google-analytics.com",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 20859,
            "sampleUrl": "https://www.google-analytics.com/analytics.js",
            "greenCheck": {
              "hostname": "www.google-analytics.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:52:18",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.google-analytics.com",
              "error": null
            }
          },
          {
            "hostname": "www.youtube.com",
            "resourceType": "script",
            "requestCount": 2,
            "transferBytes": 11103,
            "sampleUrl": "https://www.youtube.com/iframe_api",
            "greenCheck": {
              "hostname": "www.youtube.com",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2026-04-14T07:18:20",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/www.youtube.com",
              "error": null
            }
          },
          {
            "hostname": "googleads.g.doubleclick.net",
            "resourceType": "script",
            "requestCount": 1,
            "transferBytes": 2184,
            "sampleUrl": "https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829564959/?random=1776974364436&cv=11&fst=1776974364436&bg=ffffff&guid=ON&async=1&gtm=45be64m0z877087500za20gzb77087500zd77087500xea&gcd=13l3l3l3l1l1&dma=0&tag_exp=0~115938465~115938469~117266401&u_w=412&u_h=823&url=https%3A%2F%2Fwww.halifax.ca%2Fhome%2Fnews&rcb=16&frm=0&tiba=Halifax%20News%20%7C%20Halifax&hn=www.googleadservices.com&npa=0&pscdl=noapi&auid=1817292881.1776972207&uaa=&uab=64&uafvl=Not-A.Brand%3B24.0.0.0%7CChromium%3B146.0.7680.76&uamb=1&uam=moto%20g%20power%20(2022)&uap=Android&uapv=11.0&uaw=0&_tu=CA&rfmt=3&fmt=4",
            "greenCheck": {
              "hostname": "googleads.g.doubleclick.net",
              "checked": true,
              "status": "green",
              "green": true,
              "hostedBy": "Google Cloud",
              "hostedByWebsite": "https://cloud.google.com",
              "listedProvider": true,
              "partner": null,
              "modified": "2025-11-25T09:51:44",
              "supportingDocuments": [
                {
                  "id": 108,
                  "title": "Sustainability at Google",
                  "link": "https://sustainability.google"
                },
                {
                  "id": 1364,
                  "title": "Google 2024 Environmental Report",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-environmental-report.pdf"
                },
                {
                  "id": 1365,
                  "title": "Alphabet 2024 CDP Climate Change Response",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-2024-cdp-climate-change-response.pdf"
                },
                {
                  "id": 1366,
                  "title": "Google 2024 Supplier Responsibility Report.",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/google-2024-supplier-responsibility-report.pdf"
                },
                {
                  "id": 1367,
                  "title": "Alphabet FY2023 Environmental Indicators Assurance Letter",
                  "link": "https://www.gstatic.com/gumdrop/sustainability/alphabet-fy2023-environmental-indicators-assurance-letter.pdf"
                },
                {
                  "id": 1368,
                  "title": "3Degrees Cloud Services Review Statement",
                  "link": "https://services.google.com/fh/files/misc/3degrees_cloud_services_review_statement_final.pdf"
                }
              ],
              "source": "https://api.thegreenwebfoundation.org/api/v3/greencheck/googleads.g.doubleclick.net",
              "error": null
            }
          }
        ],
        "recommendations": [
          {
            "title": "Maintain a third-party JavaScript inventory",
            "urgency": "high",
            "detail": "Track 5 third-party script origin(s) and assign an owner plus business justification for each."
          },
          {
            "title": "Reduce third-party script payload and requests",
            "urgency": "high",
            "detail": "Defer non-critical tags, remove unused vendors, and gate scripts behind consent or user interaction."
          },
          {
            "title": "Prioritize greener alternatives for third-party providers",
            "urgency": "high",
            "detail": "1 third-party script origin(s) are not confirmed green in the Green Web Foundation dataset."
          }
        ]
      },
      "redundancy": {
        "score": 33,
        "urgency": "medium",
        "transferBytes": 1494024,
        "estimatedRedundantBytes": 412955,
        "redundancyRatio": 0.2764045289767768,
        "relatedAuditIds": [
          "unused-css-rules",
          "unused-javascript",
          "duplicated-javascript",
          "dom-size",
          "uses-text-compression",
          "unminified-css",
          "unminified-javascript"
        ],
        "wasteByAudit": [
          {
            "auditId": "unused-javascript",
            "title": "Reduce unused JavaScript",
            "savingsBytes": 270406,
            "displayValue": "Est savings of 264 KiB"
          },
          {
            "auditId": "unused-css-rules",
            "title": "Reduce unused CSS",
            "savingsBytes": 142549,
            "displayValue": "Est savings of 139 KiB"
          }
        ],
        "recommendations": [
          {
            "title": "Reduce unused javascript",
            "urgency": "high",
            "estimatedSavingsBytes": 270406,
            "auditId": "unused-javascript",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce unused css",
            "urgency": "high",
            "estimatedSavingsBytes": 142549,
            "auditId": "unused-css-rules",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          },
          {
            "title": "Reduce DOM complexity and redundant markup",
            "urgency": "medium",
            "estimatedSavingsBytes": 0,
            "auditId": "dom-size",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "2",
              "title": "Remove unnecessary or redundant information",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
              "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "2",
          "title": "Remove unnecessary or redundant information",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
          "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
        }
      },
      "modularization": {
        "score": 36,
        "urgency": "medium",
        "totalTransferBytes": 1494024,
        "heavyRequestCount": 5,
        "heavyBytes": 869866,
        "heavyRatio": 0.582230272070596,
        "heavyRequests": [
          {
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "transferSize": 247755,
            "resourceType": "image",
            "mimeType": "image/png",
            "domain": "www.halifax.ca"
          },
          {
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "transferSize": 163012,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-QCCWB4NYV5&cx=c&gtm=4e64m0",
            "transferSize": 162246,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/js?id=G-Z7KMKSGVV1&cx=c&gtm=4e64m0",
            "transferSize": 160360,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          },
          {
            "url": "https://www.googletagmanager.com/gtag/destination?id=AW-829564959&cx=c&gtm=4e64m0",
            "transferSize": 136493,
            "resourceType": "script",
            "mimeType": "application/javascript",
            "domain": "www.googletagmanager.com"
          }
        ],
        "groupedByType": [
          {
            "resourceType": "script",
            "count": 4,
            "transferBytes": 622111
          },
          {
            "resourceType": "image",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "groupedByOrigin": [
          {
            "domain": "www.googletagmanager.com",
            "count": 4,
            "transferBytes": 622111
          },
          {
            "domain": "www.halifax.ca",
            "count": 1,
            "transferBytes": 247755
          }
        ],
        "onDemandCandidates": [
          {
            "title": "Lazy-load offscreen images and media galleries",
            "urgency": "high",
            "estimatedSavingsBytes": 289588,
            "strategy": "Load imagery only when it enters the viewport or when a user opens the relevant section.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Split JavaScript by route or interaction",
            "urgency": "high",
            "estimatedSavingsBytes": 270406,
            "strategy": "Move non-critical bundles behind route-level or event-driven imports so they are only fetched on demand.",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy image asset from www.halifax.ca",
            "urgency": "medium",
            "estimatedSavingsBytes": 247755,
            "strategy": "Serve a smaller placeholder first and load this asset only when the user scrolls to or requests the component.",
            "url": "https://www.halifax.ca/themes/custom/halifax/images/thumbnail_placeholder.png",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          },
          {
            "title": "Modularize heavy script asset from www.googletagmanager.com",
            "urgency": "medium",
            "estimatedSavingsBytes": 163012,
            "strategy": "Load this script only on pages or interactions that require it; prefer dynamic import and feature-level bundles.",
            "url": "https://www.googletagmanager.com/gtm.js?id=GTM-K4DK2N7",
            "wsg": {
              "categoryId": "3",
              "categoryName": "Web Development",
              "id": "3",
              "title": "Modularize bandwidth-heavy components",
              "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
              "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
            }
          }
        ],
        "wsg": {
          "categoryId": "3",
          "categoryName": "Web Development",
          "id": "3",
          "title": "Modularize bandwidth-heavy components",
          "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
          "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
        }
      },
      "findings": [
        {
          "auditId": "largest-contentful-paint",
          "title": "Largest Contentful Paint",
          "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
          "score": 0.04,
          "displayValue": "7.5 s",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Largest Contentful Paint\n\n- Lighthouse audit: largest-contentful-paint\n- Current value: 7.5 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nLargest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-javascript",
          "title": "Reduce unused JavaScript",
          "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
          "score": 0,
          "displayValue": "Est savings of 264 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "16",
            "title": "Use dependencies appropriately and ensure maintenance",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance",
            "subheading": "Use libraries and frameworks only where necessary, when plain code or smaller packages are inappropriate for the use case, and they are kept up to date."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused JavaScript\n\n- Lighthouse audit: unused-javascript\n- Current value: Est savings of 264 KiB\n- WSG guideline: 16 Use dependencies appropriately and ensure maintenance\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-dependencies-appropriately-and-ensure-maintenance\n\n### Why this matters\nReduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "unused-css-rules",
          "title": "Reduce unused CSS",
          "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
          "score": 0,
          "displayValue": "Est savings of 139 KiB",
          "impact": "high",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Reduce unused CSS\n\n- Lighthouse audit: unused-css-rules\n- Current value: Est savings of 139 KiB\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nReduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "speed-index",
          "title": "Speed Index",
          "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
          "score": 0.8,
          "displayValue": "4.1 s",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "1",
            "title": "Set goals based on performance and energy impact",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact",
            "subheading": "Account for the difference in energy intensity that different types of content may have on a project and set goals based on what you would like to achieve."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Speed Index\n\n- Lighthouse audit: speed-index\n- Current value: 4.1 s\n- WSG guideline: 1 Set goals based on performance and energy impact\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#set-goals-based-on-performance-and-energy-impact\n\n### Why this matters\nSpeed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "modern-image-formats",
          "title": "Serve images in next-gen formats",
          "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 290 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Serve images in next-gen formats\n\n- Lighthouse audit: modern-image-formats\n- Current value: Est savings of 290 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nImage formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "uses-optimized-images",
          "title": "Efficiently encode images",
          "description": "Optimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 37 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "2",
            "categoryName": "User Experience Design",
            "id": "11",
            "title": "Optimize media to reduce resource use",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use",
            "subheading": "Ensure all media - including audio, video, animation, images, and other novel formats, when deemed necessary in the design, are optimized, correctly sized and formatted, use lazy loading where appropriate, with a usage policy in place."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Efficiently encode images\n\n- Lighthouse audit: uses-optimized-images\n- Current value: Est savings of 37 KiB\n- WSG guideline: 11 Optimize media to reduce resource use\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#optimize-media-to-reduce-resource-use\n\n### Why this matters\nOptimized images load faster and consume less cellular data. [Learn how to efficiently encode images](https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "offscreen-images",
          "title": "Defer offscreen images",
          "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).",
          "score": 0.5,
          "displayValue": "Est savings of 283 KiB",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "3",
            "title": "Modularize bandwidth-heavy components",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components",
            "subheading": "Break down large components into smaller, self-contained pieces that can be requested only when required to save bandwidth."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Defer offscreen images\n\n- Lighthouse audit: offscreen-images\n- Current value: Est savings of 283 KiB\n- WSG guideline: 3 Modularize bandwidth-heavy components\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#modularize-bandwidth-heavy-components\n\n### Why this matters\nConsider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn how to defer offscreen images](https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "render-blocking-resources",
          "title": "Eliminate render-blocking resources",
          "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).",
          "score": 0.5,
          "displayValue": "Est savings of 0 ms",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "18",
            "title": "Use the most efficient solution for your service",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service",
            "subheading": "Identify the project requirements, use the most efficient approach, aim for static over dynamic where possible, and consider the impact of extensions and components."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Eliminate render-blocking resources\n\n- Lighthouse audit: render-blocking-resources\n- Current value: Est savings of 0 ms\n- WSG guideline: 18 Use the most efficient solution for your service\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#use-the-most-efficient-solution-for-your-service\n\n### Why this matters\nResources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn how to eliminate render-blocking resources](https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        },
        {
          "auditId": "dom-size",
          "title": "Avoid an excessive DOM size",
          "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).",
          "score": 0.5,
          "displayValue": "1,343 elements",
          "impact": "medium",
          "wsg": {
            "categoryId": "3",
            "categoryName": "Web Development",
            "id": "2",
            "title": "Remove unnecessary or redundant information",
            "url": "https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information",
            "subheading": "Remove redundant characters from code to reduce the amount of data being stored and transferred to devices."
          },
          "assessor": "script",
          "issueTemplate": "## Improve Avoid an excessive DOM size\n\n- Lighthouse audit: dom-size\n- Current value: 1,343 elements\n- WSG guideline: 2 Remove unnecessary or redundant information\n- WSG link: https://www.w3.org/TR/web-sustainability-guidelines/#remove-unnecessary-or-redundant-information\n\n### Why this matters\nA large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/lighthouse/performance/dom-size/).\n\n### Definition of done\n- [ ] Metric improves in Lighthouse on key templates\n- [ ] Changes documented in release notes\n- [ ] Re-scan confirms improvement"
        }
      ]
    }
  ]
}
